GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist das Setzen einer Variablen vor einem Befehl in Bash legal?

Ich bin gerade auf mehrere Antworten gestoßen, z. B. zum Analysieren einer Textdatei mit Trennzeichen … die das Konstrukt verwenden:

while IFS=, read xx yy zz;do
    echo $xx $yy $zz
done < input_file

wo der IFS Variable wird vor read gesetzt Befehl.

Ich habe die Bash-Referenz gelesen, kann aber nicht herausfinden, warum dies legal ist.

Ich habe es versucht

$ x="once upon" y="a time" echo $x $y

von der Bash-Eingabeaufforderung, aber es wurde nichts zurückgegeben. Kann mir jemand zeigen, wo diese Syntax in der Referenz definiert ist, die es ermöglicht, die IFS-Variable auf diese Weise festzulegen? Handelt es sich um einen Sonderfall oder kann ich etwas Ähnliches mit anderen Variablen machen?

Akzeptierte Antwort:

Relevante Informationen finden Sie auf der vom BASH-Betreuer bereitgestellten Manpage (zuletzt überprüft im August 2020). Abschnitt Shell-Grammatik, Einfache Befehle heißt es (Hervorhebung hinzugefügt):

Ein einfacher Befehl ist eine Folge optionaler Variablenzuweisungen gefolgt von durch Leerzeichen getrennten Wörtern und Weiterleitungen , und durch einen Kontrolloperator beendet. Das erste Wort gibt den auszuführenden Befehl an und wird als Argument Null übergeben. Die restlichen Wörter werden als Argumente an den aufgerufenen Befehl übergeben.

Sie können also jede beliebige Variable übergeben. Ihr echo Beispiel funktioniert nicht, da die Variablen an den Befehl übergeben und nicht in der Shell festgelegt werden. Die Shell expandiert $x und $y vorher Aufruf des Befehls. Das funktioniert zum Beispiel:

$ x="once upon" y="a time" bash -c 'echo $x $y'
once upon a time

Linux
  1. Alias ​​mit Variable in Bash

  2. Bash-Exportbefehl

  3. Das Umleiten der Befehlsausgabe an eine Variable in Bash schlägt fehl

  4. Warum sollte man Echo verwenden, bevor man neue Software installiert?

  5. Ausgabe des Zeitbefehls in Unix in eine Variable in Bash umleiten?

Bash Heredoc

Bash-Quellbefehl

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash-printf-Befehl

Bash-Skripting (II)

Bash Beginner Series #2:Variables in Bash Shell Scripting verstehen