2012-04-06 117 views
3

我有一個bash腳本返回一個列表,這是我想要的,但我需要將結果放入一個變量中,以便我可以在for循環中一次對它們進行操作。如何將eval的結果賦給bash腳本中的變量?

#!/bin/bash 
processID="ps aux | grep `date +"%b"` | gawk '{print \$2}'" 

eval $processID 

如何將eval的結果賦值給一個變量? 謝謝

+1

你到底想幹什麼?你不需要一個變量來遍歷命令輸出,[''eval'幾乎總是一個壞主意](http://mywiki.wooledge.org/BashFAQ/048)。您可能還想閱讀[進程管理](http://mywiki.wooledge.org/ProcessManagement)。 – l0b0 2012-04-10 11:32:53

+0

我試圖對由另一個命令生成的列表進行操作。雖然我不需要用於命令輸出的變量,但在我看來,它使事情對未來更具可讀性。儘管如此,我沒有使用eval就完成了我的目標,儘管閱讀你的參考文獻可以保證我這樣做沒有錯。感謝您的意見。 – jimd 2012-04-11 00:53:40

+0

[適用信息]的另一部分(http://mywiki.wooledge.org/BashFAQ/050)。 – 2012-04-25 16:37:02

回答

1
pid=$(ps aux | grep `date +"%b"` | awk '{print $2}') 
+0

無論是在命令行還是在腳本中,我都會收到\ $ 2反斜槓不是最後一個字符的錯誤。當我拿出來時,它運行正常。謝謝。 – jimd 2012-04-10 01:08:27

1

因爲您已經在使用awk,所以您可以刪除對grep的需求。 「$」不需要轉義,因爲擴展不會出現在單引號內。

pid=$(ps aux | awk -vdate=$(date +%b) '$0 ~ date { print $2 }') 

如果您期望返回多的pid,使用數組:

pids=($(ps aux | awk -vdate=$(date +%b) '$0 ~ date { print $2 }')) 

for pid in "${pids[@]}"; do 
    ... 
done 
+2

謝謝jordanm,你給了我一種獲得結果的方法,但是你沒有回答我問的問題:「如何將eval的結果賦值給變量?」。代碼只是一個例子。 – jimd 2012-04-08 21:31:54

+0

@jimd - 使用命令替換,就像ps命令一樣。 – jordanm 2012-04-09 13:20:41

相關問題