GNU/Linux >> Linux Esercitazione >  >> Linux

Perché impostare una variabile prima di un comando è legale in Bash?

Ho appena riscontrato diverse risposte come l'analisi di un file di testo delimitato... che usa il costrutto:

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

dove il IFS la variabile è impostata prima di read comando.

Ho letto il riferimento di bash ma non riesco a capire perché questo sia legale.

Ho provato

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

dal prompt dei comandi di bash ma non ha ricevuto eco. Qualcuno può indicarmi dove è definita quella sintassi nel riferimento che consente di impostare la variabile IFS in quel modo? È un caso speciale o posso fare qualcosa di simile con altre variabili?

Risposta accettata:

Le informazioni rilevanti possono essere trovate sulla pagina man fornita dal manutentore BASH (ultima verifica ad agosto 2020). Sezione Grammatica della shell, Stati dei comandi semplici (enfasi aggiunta):

Un semplice comando è una sequenza di assegnazioni di variabili opzionali seguito da parole e reindirizzamenti separati da vuoti , e terminato da un operatore di controllo. La prima parola specifica il comando da eseguire e viene passato come argomento zero. Le parole rimanenti vengono passate come argomenti al comando invocato.

Quindi puoi passare qualsiasi variabile che desideri. Il tuo echo esempio non funziona perché le variabili vengono passate al comando, non impostate nella shell. La shell espande $x e $y prima invocando il comando. Funziona, ad esempio:

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

Linux
  1. Script Bash(I)

  2. Alias ​​con variabile in bash

  3. comando di esportazione bash

  4. Codice di uscita dall'assegnazione della variabile alla sostituzione dei comandi in Bash

  5. Reindirizzare l'output del comando time in unix in una variabile in bash?

Bash Heredoc

Comando sorgente Bash

Comando della cronologia in Linux (Cronologia di Bash)

Comando Bash printf

Script Bash(II)

Bash Beginner Series #2:Comprensione delle variabili nello scripting di Bash Shell