我有一个返回多行的命令。为了进一步处理,我需要处理这些行中的每一行。
我当前的代码通过修改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而变差。
更新:我很难获得答案,例如choroba的答案:
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)
,但这不是您在做什么。