Вместо
for var in $(cat file.txt) # или for var in `cat file.txt`
do
…
done
do
…
done
можно (и часто удобнее) использовать
cat file.txt | while read var
do
…
done
do
…
done
Особенности:
1. Во втором варианте применение пайпа изменяет область видимости переменных. В приведённом примере за пределами цикла while
переменная var
не будет видна, т.к. она выполняется в новом процессе.
2. При использовании варианта с пайпом (вариант 2) в переменную будет писаться вся строка, даже если в ней есть пробельные символы. Такое же поведение в варианте 1 можно спровоцировать, установив переменную окружения IFS=" "
(равной пробелу; хотя на своём опыте я убедился, что использование в качестве разделителя пробельных символов может повлечь за собой массу неудобств).
Тестовый комментарий 2016-11-29
Ответ на тестовый комментарий 2016-11-29