Supponiamo di avere questo file:
hello
world
hello world
Questo programma
#!/bin/bash
for i in $(cat $1); do
echo "tester: $i"
done
uscite
tester: hello
tester: world
tester: hello
tester: world
Vorrei avere il for
scorrere su ogni riga individualmente ignorando gli spazi bianchi, ad es. le ultime due righe dovrebbero essere sostituite da
tester: hello world
Usando le virgolette for i in "$(cat $1)";
risulta in i
viene assegnato l'intero file in una volta. Cosa devo cambiare?
Risposta accettata:
(9 anni dopo:)
Entrambe le risposte fornite fallirebbero sui file senza una nuova riga alla fine, questo salterà effettivamente l'ultima riga, non produrrà errori, porterebbe al disastro (appreso a fatica:).
La migliore soluzione concisa che ho trovato finora è "Just Works" (sia in bash che in sh):
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
echo "processing line: ${LINE}"
done < /path/to/input/file.txt
Per una discussione più approfondita, vedere questa discussione StackOverflow:come usare "mentre leggi" (Bash) per leggere l'ultima riga in un file se non c'è una nuova riga alla fine del file?
Attenzione:questo approccio aggiunge una nuova riga aggiuntiva all'ultima riga se non ce n'è già una.