GNU/Linux >> Znalost Linux >  >> Linux

Proč je nastavení proměnné před příkazem v Bash legální?

Právě jsem narazil na několik odpovědí, jako je analýza textového souboru s oddělovači…, které používají konstrukci:

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

kde IFS proměnná je nastavena před read příkaz.

Četl jsem odkaz na bash, ale nemohu přijít na to, proč je to legální.

Zkusil jsem

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

z příkazového řádku bash, ale nic se neozvalo. Může mi někdo ukázat, kde je tato syntaxe definována v odkazu, který umožňuje nastavit proměnnou IFS tímto způsobem? Je to speciální případ nebo mohu udělat něco podobného s jinými proměnnými?

Přijatá odpověď:

Relevantní informace lze nalézt na manuálové stránce poskytnuté správcem BASH (naposledy zkontrolována v srpnu 2020). Část Shell Grammar, Stavy jednoduchých příkazů (zvýraznění přidáno):

Jednoduchý příkaz je sekvence volitelných přiřazení proměnných následují slova a přesměrování oddělená prázdnými znaky a ukončena kontrolním operátorem. První slovo určuje příkaz, který se má provést, a je předán jako argument nula. Zbývající slova jsou předána jako argumenty vyvolanému příkazu.

Můžete tedy předat jakoukoli proměnnou, kterou chcete. Vaše echo příklad nefunguje, protože proměnné jsou předány příkazu, nejsou nastaveny v shellu. Shell expanduje $x a $y před vyvolání příkazu. Funguje to například:

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

Linux
  1. Přesměrování výstupu příkazu do proměnné v bash se nezdaří

  2. Proč používat echo před instalací nového softwaru?

  3. Přesměrovat výstup příkazu time v unixu do proměnné v bash?

  1. Alias ​​s proměnnou v bash

  2. příkaz pro export bash

  3. Výstupní kód přiřazení proměnné k substituci příkazu v Bash

  1. Bash skriptování (I)

  2. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  3. Spusťte příkaz bash na jenkins pipeline