Warum ist der Befehl md5sum <<< 'ddd'
(output:) d6d88f2e50080b9602da53dac1102762 -
richtig und md5sum << 'ddd'
nicht?
Was heißt <<<
das?
quelle
Warum ist der Befehl md5sum <<< 'ddd'
(output:) d6d88f2e50080b9602da53dac1102762 -
richtig und md5sum << 'ddd'
nicht?
Was heißt <<<
das?
Das <<<
startet einen "Hier-String": Der String wird erweitert und dem stdin des Programms zugeführt. (In Ihrem Fall findet nicht viel Expansion statt.) Dies entspricht:
echo ddd | md5sum
Zum anderen <<
startet hier ein Dokument. Alle folgenden Zeilen bis zu einer, die den Marker enthält ddd
, umfassen die Eingabe des Programms. (Sie sollten einen Marker verwenden, der wahrscheinlich nicht in Ihren Daten enthalten ist.) Sie können den gleichen Effekt wie oben erzielen:
md5sum <<END
ddd
END
Es gibt einen Unterschied zwischen <<END
und <<'END'
: Ohne die Anführungszeichen werden alle Variablen, Escape-Sequenzen usw. im vorliegenden Dokument wie gewohnt erweitert.
rc
,<<<
(wie<<
) eine temporäre Datei verwendet , kann so durch Befehle , die verwendet werden ,lseek
deren stdin.<<<
Führt eine Here-Zeichenfolge ein : Die Zeichenfolge danach<<<
wird als Eingabe an den Befehl übergeben. Dieser stammt aus Byron Rakitzis 'Port vonrc
(einer Plan 9-Shell) zu Unix und ist auch in zsh, ksh93 und bash vorhanden.<<
Führt ein here-Dokument ein : Nachfolgende Zeilen des Shell-Skripts werden als Eingabe an den Befehl übergeben, und die Zeichenfolge after<<
ist ein Abschlusszeichen. Hier funktionieren Dokumente in allen Bourne-Shells (Bourne, POSIX, ash, bash, ksh, zsh,…), C-Shells (csh, tcsh) und Plan 9-Shells (rc, es).quelle
<<<
ist keineksh
Erweiterung, der Pfad istrc
->zsh
->ksh93
->bash
(ksh
Versionshinweise bestätigen das einmalige Ausleihen des Features vonzsh
).<<
funktioniert auch inrc
Stil Muschelnrc
undzsh
<<<
obwohl darinrc
kein abschließendes Zeilenumbruchzeichen und keine temporäre Datei enthalten ist (verwendet eine Pipe und einen zusätzlichen Prozess, der sie zumindest im Port an Linux weiterleitet).<<<
aus dem Unix - Port kommt vonrc
da es sieht nicht aus wie die Plan9rc
es hat.