it-swarm.com.de

Was bedeutet <<<?

Was bedeutet <<<? Hier ist ein Beispiel:

$ sed 's/a/b/g' <<< "aaa"
bbb

Ist es etwas Allgemeines, das mit mehr Linux-Befehlen funktioniert?

Es sieht so aus, als würde das Programm sed mit der Zeichenfolge aaa gespeist, aber wird << oder <normalerweise nicht dafür verwendet?

136
Daniel Jonsson

Andere haben die grundlegende Frage beantwortet: Was ist das? Schauen wir uns an, warum es nützlich ist.

Sie können dem Standard eines Befehls auch eine Zeichenfolge wie folgt zuführen:

echo "$string" | command

In Bash bedeutet das Einführen einer Pipe jedoch, dass die einzelnen Befehle in Unterschalen ausgeführt werden. Bedenken Sie:

echo "hello world" | read first second
echo $second $first

Die Ausgabe des 2. Echo-Befehls gibt nur ein Leerzeichen aus. Was? Was ist mit meinen Variablen passiert? Da sich der Lesebefehl in einer Pipeline befindet, wird er in einer Subshell ausgeführt. Es liest 2 Wörter korrekt aus seinem Standard und weist den Variablen zu. Aber dann wird der Befehl abgeschlossen, die Unterschale wird beendet und die Variablen gehen verloren.

Manchmal können Sie dies mit geschweiften Klammern umgehen:

echo "hello world" | {
    read first second
    echo $second $first
}

Das ist in Ordnung, wenn Sie die Werte benötigen, diese Variablen jedoch noch nicht in der aktuellen Shell Ihres Skripts enthalten sind. Verwenden Sie eine Here-Zeichenfolge, um diese verwirrende Situation zu beheben

read first second <<< "hello world"
echo $second $first

Ah, viel besser!

183
glenn jackman

<<< bezeichnet eine Here-Zeichenfolge.

$ cat <<< 'hi there'
hi there

Es übergibt das Wort rechts an die Standardeingabe des Befehls links.


<< bezeichnet ein hier vorhandenes Dokument.

$ cat <<EOF
> hi
> there
> EOF
hi
there

EOF kann ein beliebiges Wort sein.

Hier werden Dokumente häufig in Shell-Skripten verwendet, um ganze Dateien zu erstellen oder lange Nachrichten anzuzeigen.

cat > some-file <<FILE
foo
bar
bar bar
foo foo
FILE

< übergibt den Inhalt einer Datei an die Standardeingabe eines Befehls.

$ cat < /etc/fstab
/dev/sda2               /boot   ext4            nosuid,noexec,nodev,rw,noatime,nodiratime       0 2
/dev/sda4               /       ext4            rw,noatime,nodiratime,  0 1
/dev/sdb5               /var    ext4            nosuid,noexec,nodev,rw,relatime 0 2
 ...
84
user26112

Schauen Sie sich die Bash Manpage an. Diese Notation ist Teil der hier als bezeichneten Dokumente & hier Zeichenfolgen . Sie können damit mehrzeilige Dateneingaben als eine fortlaufende Zeichenfolge generieren. Die Variation, nach der Sie fragen, wird hier als Zeichenfolge bezeichnet.

Auszug aus der Bash-Manpage

Here Strings
   A variant of here documents, the format is:

          <<<Word

   The Word is expanded and supplied to the command on its standard input.
16
slm

Es bedeutet hier Zeichenfolgen.

<<< strings

Die Zeichenfolgen werden erweitert und dem Befehl an seiner Standardeingabe übergeben.

In Ihrem Beispiel werden die Zeichenfolgen aaa über stdin an den Befehl sed weitergeleitet.

5
cuonglm