我需要從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