Řekněme, že mám tento soubor:
hello
world
hello world
Tento program
#!/bin/bash
for i in $(cat $1); do
echo "tester: $i"
done
výstupy
tester: hello
tester: world
tester: hello
tester: world
Chtěl bych mít for
iterujte přes každý řádek jednotlivě, ignorujte však mezery, tj. poslední dva řádky by měly být nahrazeny
tester: hello world
Použití uvozovek for i in "$(cat $1)";
výsledkem je i
přiřazení celého souboru najednou. Co bych měl změnit?
Přijatá odpověď:
(o 9 let později:)
Obě poskytnuté odpovědi by selhaly na souborech bez nového řádku na konci, což by fakticky přeskočilo poslední řádek, nevytvářelo by žádné chyby, vedlo by to ke katastrofě (naučené těžce:).
Nejlepší stručné řešení, které jsem zatím našel, že „Just Works“ (v bash i sh):
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
echo "processing line: ${LINE}"
done < /path/to/input/file.txt
Podrobnější diskusi najdete v této diskusi StackOverflow:Jak použít „při čtení“ (Bash) ke čtení posledního řádku v souboru, pokud na konci souboru není žádný nový řádek?
Pozor:tento přístup přidá další nový řádek na poslední řádek, pokud tam ještě žádný není.