ste*_*wpf 9 shell bash command-substitution command
我有一个返回多行的命令。为了进一步处理,我需要处理这些行的每一行。
我当前的代码通过修改 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
Run Code Online (Sandbox Code Playgroud)
我想知道,是否有更好的方法来访问多行输出的单行,而不修改 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
Run Code Online (Sandbox Code Playgroud)
给我
./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 \"""\").
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我吗?谢谢!
cho*_*oba 14
怎么样read
在一个while
循环?
some command returning multiple lines | while IFS= read -r line ; do
echo "$line"
done
Run Code Online (Sandbox Code Playgroud)
但是请注意,管道在子shell 中运行,这意味着您无法更改脚本其余部分的变量值。如果你需要一些东西从你的 while 循环中存活下来,你可以使用 bash 的进程替换:
while IFS= read -r line ; do
let var+=line
done < <(some command returning multiple lines)
echo "$var"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20536 次 |
最近记录: |