2013-02-27 15 views
26

में अजीब के बैश कैप्चरिंग आउटपुट मैं थोड़ी सी समस्या पर फंस गया हूं। मेरे पास एक कमांड है जो पाइप आउटपुट को अजीब बनाता है लेकिन मैं एक सरणी के आउटपुट को एक-एक करके कैप्चर करना चाहता हूं।एआर

मेरे उदाहरण:

myarr=$(ps -u kdride | awk '{ print $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 

मैं चाहता हूँ: निम्नलिखित

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

मैं भी कोशिश की प्रत्येक व्यक्तिगत पिड को अपने स्वयं के सरणी तत्व में कैप्चर करने में सक्षम होने के लिए। IFS = '\n' सेट करना कुछ भी नहीं करता है और मेरा मूल आउटपुट बरकरार रखता है। इस काम को करने के लिए मुझे क्या बदलाव करने की ज़रूरत है?

+0

आप 'myarr = ($ (ps -u kdride -o pid)) का उपयोग करके 'awk' कमांड को पूरी तरह से छोड़ सकते हैं)। (पॉल के जवाब में बताए गए अतिरिक्त कोष्ठक पर ध्यान दें)। – chepner

उत्तर

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

+3

क्या करने का मुद्दा है: क्या करने के बाद? हमें यहां एक सच्चाई क्यों चाहिए? मैं इसके बिना भाग गया और यह अभी भी काम किया? – mmlac

+0

मैं भी उत्सुक हूं कि ':' –

संबंधित मुद्दे