Befehlszeile: <<< statt <<


63

Warum ist der Befehl md5sum <<< 'ddd' (output:) d6d88f2e50080b9602da53dac1102762 -richtig und md5sum << 'ddd'nicht?

Was heißt <<<das?

Antworten:


45

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 <<ENDund <<'END': Ohne die Anführungszeichen werden alle Variablen, Escape-Sequenzen usw. im vorliegenden Dokument wie gewohnt erweitert.


3
Wo es nicht gleichwertig ist , dass außer in rc, <<<(wie <<) eine temporäre Datei verwendet , kann so durch Befehle , die verwendet werden , lseekderen stdin.
Stéphane Chazelas

32

<<<Führt eine Here-Zeichenfolge ein : Die Zeichenfolge danach <<<wird als Eingabe an den Befehl übergeben. Dieser stammt aus Byron Rakitzis 'Port von rc(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).


3
Nein, <<<ist keine kshErweiterung, der Pfad ist rc-> zsh-> ksh93-> bash( kshVersionshinweise bestätigen das einmalige Ausleihen des Features von zsh). <<funktioniert auch in rcStil Muscheln
Stéphane Chazelas

Es gibt einen Unterschied zwischen rcund zsh <<<obwohl darin rckein 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).
Stéphane Chazelas

Um genauer zu sein es sieht aus wie <<<aus dem Unix - Port kommt von rcda es sieht nicht aus wie die Plan9 rces hat.
Stéphane Chazelas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.