Perché il comando md5sum <<< 'ddd'
(output:) è d6d88f2e50080b9602da53dac1102762 -
giusto e md5sum << 'ddd'
non?
Cosa <<<
significa?
Perché il comando md5sum <<< 'ddd'
(output:) è d6d88f2e50080b9602da53dac1102762 -
giusto e md5sum << 'ddd'
non?
Cosa <<<
significa?
Risposte:
Le <<<
inizia un “qui stringa”: la stringa viene ampliato ed alimentati allo stdin del programma. (Nel tuo caso, non sta avvenendo molto di espansione.) È equivalente a questo:
echo ddd | md5sum
D'altra parte, <<
inizia un documento qui. Tutte le seguenti righe fino a una contenente il marker ddd
includeranno l'input del programma. (Dovresti usare un marcatore che non è probabile che appaia nei tuoi dati.) Potresti ottenere lo stesso effetto di cui sopra in questo modo:
md5sum <<END
ddd
END
C'è una differenza tra <<END
e <<'END'
: senza le virgolette, qualsiasi variabile, sequenza di escape ecc. Nel documento qui verrà espansa come al solito.
<<<
introduce una stringa qui : la stringa dopo <<<
viene passata come input al comando. Ciò ha origine nel porto di Byron Rakitzis di rc
(una shell Plan 9) con Unix, ed è presente anche in zsh, ksh93 e bash.
<<
introduce un documento qui : le righe successive dello script della shell vengono passate come input al comando e la stringa successiva <<
è un terminatore. Qui i documenti funzionano in tutte le shell in stile Bourne (Bourne, POSIX, ash, bash, ksh, zsh, ...), shell in stile C (csh, tcsh) e shell Plan 9 (rc, es).
<<<
non è ksh
un'estensione, il percorso è rc
-> zsh
-> ksh93
-> bash
(le ksh
note di rilascio riconoscono per aver preso in prestito la funzione da zsh
). <<
funziona anche con rc
conchiglie di stile
rc
e zsh
<<<
sebbene rc
ciò non includa un carattere newline finale e non usi un file temporaneo (usa una pipe e un processo extra che lo alimenta almeno nella porta su Linux).
<<<
provenga dalla porta Unix rc
in quanto non sembra che Plan9 lo rc
abbia.
rc
,<<<
(like<<
) usa un file temporaneo in modo che possa essere utilizzato dai comandi che illseek
loro stdin.