GNU/Linux >> Znalost Linux >  >> Linux

Číst hodnoty do proměnné shellu z kanálu

Toto je další možnost

$ read test < <(echo hello world)

$ echo $test
hello world

pokud chcete načíst velké množství dat a pracovat na každém řádku zvlášť, můžete použít něco takového:

cat myFile | while read x ; do echo $x ; done

pokud chcete rozdělit řádky na více slov, můžete místo x použít více proměnných takto:

cat myFile | while read x y ; do echo $y $x ; done

případně:

while read x y ; do echo $y $x ; done < myFile

Ale jakmile začnete chtít udělat něco opravdu chytrého s tímto druhem věcí, měli byste si vybrat nějaký skriptovací jazyk, jako je perl, kde byste mohli zkusit něco takového:

perl -ane 'print "$F[0]\n"' < myFile

Perl (nebo tuším některý z těchto jazyků) je poměrně strmý, ale z dlouhodobého hlediska to bude mnohem snazší, pokud chcete dělat cokoliv jiného než ty nejjednodušší skripty. Doporučil bych Perl Cookbook a samozřejmě The Perl Programming Language od Larry Wall et al.


Použijte

IFS= read var << EOF
$(foo)
EOF

můžete trik read do přijetí z potrubí, jako je tento:

echo "hello world" | { read test; echo test=$test; }

nebo dokonce napsat funkci jako je tato:

read_from_pipe() { read "[email protected]" <&0; }

Ale to nemá smysl – vaše variabilní přiřazení nemusí vydržet! Potrubí může vytvořit podskořápku, kde je prostředí zděděno hodnotou, nikoli odkazem. To je důvod, proč read neobtěžuje se vstupem z potrubí – je nedefinovaný.

Pro informaci, http://www.etalabs.net/sh_tricks.html je šikovná sbírka věcí nezbytných k boji s podivnostmi a nekompatibilitou bourneských mušlí, shi.


Linux
  1. Jak získat název aktuální větve git do proměnné v shell skriptu?

  2. Odeslání pošty z linuxového shell skriptu

  3. Shell - Zápis proměnného obsahu do souboru

  1. Jak zachovat konce řádků při ukládání výstupu příkazu do proměnné?

  2. Vyjasnění týkající se chování shell skriptu spolu s roura

  3. bash + čtení proměnných a hodnot ze souboru pomocí bash skriptu

  1. Ignoruje smyčka změnu proměnné z podskořápky na pozadí?

  2. Jak číst proměnnou ze souboru?

  3. Shell =Zkontrolujte, zda proměnná začíná #