GNU/Linux >> Znalost Linux >  >> Linux

Tiskový výstup příkazu cat ve smyčce skriptu bash

Používáte nesprávný typ uvozovek.

Chcete-li, aby argument byl spuštěný program a přesouval obsah do forloopu, musíte použít zadní uvozovky místo jednoduchých uvozovek.

for tbl in `cat /tmp/tables` 
do 
    echo "$tbl"
done

Také pro lepší čitelnost (pokud používáte bash) jej můžete napsat jako

for tbl in $(cat /tmp/tables) 
do 
    echo "$tbl"
done

Pokud je vaším očekáváním získat každý řádek (výše uvedené smyčky for vám poskytnou každé slovo), možná pro vás bude lepší použít xargs , takhle

cat /tmp/tables | xargs -L1 echo

nebo jako smyčka

cat /tmp/tables | while read line; do echo "$line"; done

Jednoduché uvozovky by měly být obrácené:

for tbl in `cat /etc/tables`

Ačkoli to nezíská výstup/vstup po řádcích, ale po slovech. Chcete-li zpracovat řádek po řádku, měli byste zkusit něco jako:

cat /etc/tables | while read line
    echo $line
done

Linux
  1. Jak používat příkaz if else Conditionals ve skriptu Bash

  2. Bash Echo Příkazový řádek spuštěn na samotném příkazovém řádku (ne ve skriptu)?

  3. Jak zastavit skript Loop Bash v terminálu?

  1. Jak zopakovat nový řádek ve skriptech Bash Shell

  2. Existuje v bash způsob, jak echo/tisknout poslední stdout? Existuje proměnná, ke které je přiřazena stdout?

  3. Bash/sh příkaz „jestli je to jinak“.

  1. echo text s novým řádkem v bash

  2. Připojte konec řádku k výstupu příkazu

  3. Bash smyčka rozbalte skript zaheslovaného souboru