如何逐行处理shell中命令的输出?

Dav*_*eer 22 shell

我需要从bash脚本处理库的共享库依赖项.该for命令逐字处理:

for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
    ...
done
Run Code Online (Sandbox Code Playgroud)

逐行处理结果的方法是什么?

ton*_*nio 29

您应该使用该read命令.

otool -L MyApplication | sed 1d | \
while read i
do
  echo "line: " $i
done
Run Code Online (Sandbox Code Playgroud)

有关read builtin及其选项的说明,请参阅bashref.您还可以查看以下教程,了解read与之结合使用的示例for.

  • 警告:如果你需要在while循环中设置变量(即存储你在otool输出中找到的变量),它们会在循环退出后立即消失,因为它是管道的一部分,因此在子shell中运行.在bash中,你可以通过一些重新排列来解决这个问题:`同时阅读i; 做... <<<(otool -L MyApplication | sed 1d)` (9认同)
  • 另一个警告:这将删除大量空格和反斜杠。使用 `read -ri` 来读取没有此类修改的行。 (2认同)

Jim*_*wis 9

otool -L MyApplication | sed 1d | while read line ;
do
  # do stuff with $line
done
Run Code Online (Sandbox Code Playgroud)