2010-06-24 96 views

回答

23

您应该使用read命令。

otool -L MyApplication | sed 1d | \ 
while read i 
do 
    echo "line: " $i 
done 

查看bashref了解内置读取及其选项的说明。您还可以查看以下tutorial,其中使用readfor结合使用的示例。

+7

警告:如果您需要设置在while循环变量(即保存您在otool的输出发现了什么),他们会尽快消失的循环退出,因为它的一部分的管道,因此运行在一个子shell中。在bash中,你可以通过一些重新安排来解决这个问题:'一边读我一边; do ... done <<(otool -L MyApplication | sed 1d)' – 2010-06-24 22:37:13

+1

另一个警告:这将删除大量的空格和反斜杠。使用'read -r i'读取没有这种修改的行。 – Jens 2012-05-24 21:04:11

+0

@Jens,不,它是吃饭空间的回声命令。 'echo“行:$ i”'会阻止。 – 2013-07-14 22:27:41

0

您可以使用awk以每行为基础处理事情。究竟什么是最好的方法取决于你想要做什么。

7
otool -L MyApplication | sed 1d | while read line ; 
do 
    # do stuff with $line 
done 
3

尝试将内部字段分隔符更改为换行符。默认情况下,bash在使用for循环时将用空格分隔标记。你的IFS设置将使得for循环根据IFS等于的任何字符串拆分记号(因此用新行而不是由空格记号来分割列表记号)。

[bash ] $ IFS=" 
" 
[bash ] $ for DEPENDENCY in `otool -L MyApplication | sed 1d` 
do 
    .... 
done 
0

你也可以做awk。没必要用一个bash for循环

otool -L MyApplication | awk 'NR>1 
{ 
    # do your stuff here since awk process line by line. 
}' 
0

你必须使用shell内置read,但要小心包含空格和跳线。我在当地提出的$IFS变化值:

otool -L MyApplication | sed 1d | \ 
while IFS= read i; do 
    echo "line: " $i 
done 
相关问题