2011-04-25 52 views
8

我有一個bash腳本在循環中執行程序。我想要評估stdout中的每一行,如果它符合我的條件,請執行一些操作。從stdout評估線

我仍然希望能夠在屏幕上看到標準輸出。有沒有簡單的方法來實現這一點?謝謝!

+0

你的意思是說你想**回顯你正在解析的行嗎? – 2011-04-25 21:20:44

回答

12

有遍歷輸入幾個變種,但有可能是這樣的:

my_cmd | while read line; do 
    echo "$line" 
    my_process "$line" 
done 
+1

請注意,您可以使用multiplve變量名將塊讀入它們中('| while read id number description; do echo $ number:$ id; done') – sehe 2011-04-25 22:05:10

+1

要保留空白,引用變量:'echo「$ line」; my_process「$ line」' – 2011-04-25 23:58:40

+3

另外,請注意,將'while'放入管道中意味着while體在子進程中執行。根據'my_process'的不同,OP可能不需要這麼做,所以:'while read -r line;做...;完成<<(my_cmd)' – 2011-04-26 00:00:59

-1

這應該做你想要什麼:

for string in "a" "b" "c" 
do 
    output=`echo ${string}` 
    echo ${output} 
    if [ ${output} == "b" ] ; then 
     echo "do something" 
    fi 
done 

只需用程序代替第一回波。

+0

這是迭代在字符串文字列表。這個問題特別要求STDOUT中的行是可迭代對象。 – 2012-04-16 16:56:49

+0

以下工作: 用於'ls。'中的字符串 做 echo $字符串 完成 – Andrey 2016-12-08 10:05:41