2012-01-11 12 views
6

में व्हाइटस्पेस युक्त स्टोर है, मैं एक सरणी में blkid के आउटपुट की कुछ लाइनों को स्टोर करना चाहता हूं। समस्या यह है कि उन पंक्तियों में व्हाइटस्पेस होता है और सरणी वाक्यविन्यास उन्हें एकल सरणी तत्वों के लिए डिलीमीटर के रूप में ले जाता है, ताकि मैं एक सरणी तत्व को मधुमक्खी करने वाली एक पंक्ति के बजाय मेरी सरणी में विभाजित रेखाओं के साथ समाप्त हो जाऊं।स्टोर grep आउटपुट जिसमें एक सरणी

/dev/sdb1: LABEL="ARCH_201108" TYPE="udf" 
/dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" 

लेकिन echo ${#devices[*]} मुझे 7 देता है, लेकिन insted मैं 2 करना चाहते हैं: devices=($(sudo blkid | egrep '^/dev/sd[b-z]'))

echo ${devices[*]} मेरा पीछा उत्पादन देता है:

इस कोड मैं वर्तमान में है। मैं /dev/sdb1: LABEL="ARCH_201108" TYPE="udf" को अपने डिवाइस सरणी में पहला तत्व और /dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" दूसरा होना चाहता हूं। मैं इसे कैसे पूरा कर सकता हूं?

उत्तर

13

ऐरे तत्व IFS मान पर विभाजित हैं। आप न्यू लाइन पर विभाजित करना चाहते हैं, तो समायोजित आईएफएस:

IFS_backup=$IFS 
IFS=$'\n' 
devices=($(sudo blkid | egrep '^/dev/sd[b-z]')) 
IFS=$IFS_backup 
echo ${#devices[@]} 
+0

से पूर्ण हो गया ... +1 –

+0

धन्यवाद, कि exaclty है मैं क्या देख रहा था। –

+0

मुझे खुशी है कि आपके जैसे लोग मौजूद हैं: उत्तर के लिए धन्यवाद :) –

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