我需要从bash脚本处理库的共享库依赖项。 for
命令逐字处理:
for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
...
done
逐行处理结果的方法是什么?
答案 0 :(得分:29)
您应该使用read
命令。
otool -L MyApplication | sed 1d | \
while read i
do
echo "line: " $i
done
有关read builtin及其选项的说明,请参阅bashref。您还可以查看以下tutorial,了解将read
与for
结合使用的示例。
答案 1 :(得分:9)
otool -L MyApplication | sed 1d | while read line ;
do
# do stuff with $line
done
答案 2 :(得分:3)
尝试将内部字段分隔符更改为换行符。默认情况下,bash将在使用for循环时按空格分隔标记。您的IFS设置将使for循环根据IFS等于的任何字符串拆分标记(从而通过换行而不是按空格分隔列表标记)。
[bash ] $ IFS="
"
[bash ] $ for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
....
done
答案 3 :(得分:1)
您必须使用shell builtin read
,但要注意包含空格和制表符的行。我建议在本地更改$IFS
的价值:
otool -L MyApplication | sed 1d | \
while IFS= read i; do
echo "line: " $i
done
答案 4 :(得分:0)
您可以使用awk
按行进行处理。究竟什么是最好的方式取决于你想要做的事情。
答案 5 :(得分:0)
你也可以这样做。无需使用bash for loop
otool -L MyApplication | awk 'NR>1
{
# do your stuff here since awk process line by line.
}'
答案 6 :(得分:0)
现代 bash 方式:
while read i; do
...
done < <(otool -L MyApplication | sed 1d)
注意:上面的两个“<”不是拼写错误,这是正确的语法。