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 dddincluderanno 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 <<ENDe <<'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 è kshun'estensione, il percorso è rc-> zsh-> ksh93-> bash(le kshnote di rilascio riconoscono per aver preso in prestito la funzione da zsh). <<funziona anche con rcconchiglie di stile
rce zsh <<<sebbene rcciò 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 rcin quanto non sembra che Plan9 lo rcabbia.
rc,<<<(like<<) usa un file temporaneo in modo che possa essere utilizzato dai comandi che illseekloro stdin.