2013-02-27 91 views
26

我困在一個小問題上。我有一個命令管道輸出到awk,但我想捕獲到一個數組的輸出。Bash將awk的輸出捕獲到數組中

我的例子:

myarr=$(ps -u kdride | awk '{ print $1 }') 

但是,捕獲所有的輸出轉換成一個巨大的字符串以逗號分隔:

output: PID 3856 5339 6483 10448 15313 15314 15315 15316 22348 29589 29593 32657 1 

我也試過如下:

IFS="," 
myarr=$(ps -u kdride | awk '{ print $1"," }') 

But the output is: PID, 3856, 5339, 6483, 10448, 15293, 15294, 15295, 15296, 22348, 29589, 29593, 32657, 
1 

我想能夠將每個單獨的pid捕獲到它自己的數組元素中。設置IFS = '\n'不會執行任何操作並保留我的原始輸出。我需要做些什麼才能做到這一點?

+0

您可以使用'myarr =($(ps -u kdride -o pid))'完全跳過'awk'命令。 (請注意保羅答案中指出的額外括號)。 – chepner 2013-02-27 13:56:26

回答

42

添加額外的括號,就像這樣:

myarr=($(ps -u kdride | awk '{ print $1 }')) 

# Now access elements of an array (change "1" to whatever you want) 
echo ${myarr[1]} 

# Or loop through every element in the array 
for i in "${myarr[@]}" 
do 
    : 
    echo $i 
done 

又見bash — Arrays

+0

非常感謝。我完全跳過了那部分。參考資料非常感謝 – Paul 2013-02-27 06:20:38

+3

有什麼要點:做完之後?爲什麼我們需要一個真實的?我沒有它跑它,它仍然工作? – mmlac 2016-05-06 20:24:03

+0

我也很好奇爲什麼有':' – 2016-07-13 17:52:03