我需要从bash脚本处理库的共享库依赖关系。该for
命令过程字的字:如何在shell中逐行处理命令的输出?
for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
...
done
什么是处理结果行由行的方式吗?
我需要从bash脚本处理库的共享库依赖关系。该for
命令过程字的字:如何在shell中逐行处理命令的输出?
for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
...
done
什么是处理结果行由行的方式吗?
您可以使用awk
以每行为基础处理事情。究竟什么是最好的方法取决于你想要做什么。
otool -L MyApplication | sed 1d | while read line ;
do
# do stuff with $line
done
尝试将内部字段分隔符更改为换行符。默认情况下,bash在使用for循环时将用空格分隔标记。你的IFS设置将使得for循环根据IFS等于的任何字符串拆分记号(因此用新行而不是由空格记号来分割列表记号)。
[bash ] $ IFS="
"
[bash ] $ for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
....
done
你也可以做awk。没必要用一个bash for循环
otool -L MyApplication | awk 'NR>1
{
# do your stuff here since awk process line by line.
}'
你必须使用shell内置read
,但要小心包含空格和跳线。我在当地提出的$IFS
变化值:
otool -L MyApplication | sed 1d | \
while IFS= read i; do
echo "line: " $i
done
警告:如果您需要设置在while循环变量(即保存您在otool的输出发现了什么),他们会尽快消失的循环退出,因为它的一部分的管道,因此运行在一个子shell中。在bash中,你可以通过一些重新安排来解决这个问题:'一边读我一边; do ... done <<(otool -L MyApplication | sed 1d)' – 2010-06-24 22:37:13
另一个警告:这将删除大量的空格和反斜杠。使用'read -r i'读取没有这种修改的行。 – Jens 2012-05-24 21:04:11
@Jens,不,它是吃饭空间的回声命令。 'echo“行:$ i”'会阻止。 – 2013-07-14 22:27:41