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