我需要通过bash脚本处理一个库的共享库依赖项,for命令可以逐字处理:
for
for DEPENDENCY in `otool -L MyApplication | sed 1d` do ... done
逐行处理结果的方法是什么?
368yc8dk1#
您应该使用read命令。
read
otool -L MyApplication | sed 1d | \ while read i do echo "line: " $i done
阅读bashref了解read内置函数及其选项的描述,你也可以阅读下面的教程了解结合使用read和for的例子。
q9rjltbz2#
otool -L MyApplication | sed 1d | while read line ; do # do stuff with $line done
ulydmbyx3#
尝试将内部字段分隔符更改为换行符。默认情况下,bash在使用for循环时会使用空格分隔标记。IFS设置将使for循环根据IFS等于的字符串来拆分标记(从而使用换行符拆分列表标记,而不是使用空格拆分标记)。
[bash ] $ IFS=" " [bash ] $ for DEPENDENCY in `otool -L MyApplication | sed 1d` do .... done
vm0i2vca4#
你必须使用shell内置的read,但是要小心包含空格和制表符的行。我建议在本地修改$IFS的值:
$IFS
otool -L MyApplication | sed 1d | \ while IFS= read i; do echo "line: $i" done
[Edit:应用了Charles的建议]
4szc88ey5#
现代人抨击道:
while read i; do ... done < <(otool -L MyApplication | sed 1d)
注意:上面的两个“〈"不是拼写错误,这是正确的语法。
lg40wkob6#
您可以使用awk逐行处理,但最好的方法取决于您要做什么。
awk
cygmwpex7#
你也可以用awk来做,不需要使用bash for循环
otool -L MyApplication | awk 'NR>1 { # do your stuff here since awk process line by line. }'
7条答案
按热度按时间368yc8dk1#
您应该使用
read
命令。阅读bashref了解read内置函数及其选项的描述,你也可以阅读下面的教程了解结合使用
read
和for
的例子。q9rjltbz2#
ulydmbyx3#
尝试将内部字段分隔符更改为换行符。默认情况下,bash在使用for循环时会使用空格分隔标记。IFS设置将使for循环根据IFS等于的字符串来拆分标记(从而使用换行符拆分列表标记,而不是使用空格拆分标记)。
vm0i2vca4#
你必须使用shell内置的
read
,但是要小心包含空格和制表符的行。我建议在本地修改$IFS
的值:[Edit:应用了Charles的建议]
4szc88ey5#
现代人抨击道:
注意:上面的两个“〈"不是拼写错误,这是正确的语法。
lg40wkob6#
您可以使用
awk
逐行处理,但最好的方法取决于您要做什么。cygmwpex7#
你也可以用awk来做,不需要使用bash for循环