У меня есть команда, возвращающая несколько строк. Для дальнейшей обработки мне нужно обработать каждую строку этих строк.
Мой текущий код работает путем изменения IFS ( Разделитель внутренних полей ):
ROWS=$(some command returning multiple lines)
O=$IFS #save original IFS
IFS=$(echo -en "\n\b") # set IFS to linebreak
for ROW in ${ROWS[@]}
do
echo "$ROW"
done
IFS=$O #restore old IFS
Мне интересно, есть ли лучший способ получить доступ к отдельным строкам вывода нескольких строк, один без изменения IFS? Особенно читаемость моего сценария ухудшается при модификации IFS.
Обновление: у меня проблемы с получением ответов, например, от Чороба:
while IFS= read -r line ; do
let var+=line #line 42
done << $(sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db "${QUERY}")
echo "$var" # line 44
дает мне
./bla.sh: row 44: Warning: here-document at line 43 delimited by end-of-file (wanted `$(sqlite3 -list -nullvalue NULL -separator , /var/log/asterisk/master.db ${QUERY})')
./bla.sh: row 42: let: echo "": syntax error: invalid arithmetic operator. (error causing character is \"""\").
Кто-нибудь может мне помочь с этим? Спасибо!
< <(some command returning multiple lines)
, но это не то, что вы делаете.