2010-06-24 89 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 
相關問題