2013-03-22 9 views
6

करने के लिए स्पेस सीमांकित टोकन के साथ एक स्ट्रिंग परिवर्तित करने के लिए मैं एक स्ट्रिंगबैश स्क्रिप्ट एक सरणी

echo $STRING 

जो

first second third fourth fifth 

मूल रूप से एक अलग की गई सूची रिक्त स्थान देता है।

मैं कैसे कि स्ट्रिंग लेने के लिए और यह एक सरणी कर सकता हूँ ताकि

array[0] = first 
array[1] = second 

आदि ..

मैं

IFS=' ' read -a list <<< $STRING 

लेकिन फिर कोशिश की है जब मैं एक

करना
echo ${list[@]} 

यह केवल प्रिंट करता है ut "पहली" और कुछ नहीं

+0

देखें यहाँ: आप पहली बार यह घोषणा, तो निम्न आदेश में यह के प्रभाव का उपयोग करने के लिए है http://stackoverflow.com/questions/918886/how-do-i-split-a-string-on -ए-डेलीमीटर-इन-बैश – ceving

उत्तर

11

यह आसान वास्तव में है:

list=($STRING) 

या वरबोस रूप में दर्शा:

declare -a list=($STRING) 

पुनश्च: आप भारतीय विदेश सेवा निर्यात नहीं कर सकते हैं और एक ही आदेश में नए मान का उपयोग ।

$ list=(first second third) 
$ IFS=":" echo "${list[*]}" 
first second third 
$ IFS=":" ; echo "${list[*]}" 
first:second:third 
+0

कमाल ने काम किया। लेकिन यह कैसे पता चलता है कि इसे किस प्रकार विभाजित करना है? – Dan

+0

'IFS' 'डिफ़ॉल्ट मान' \ t \ n \ r' या ऐसा कुछ है। '() '-ynynax का उपयोग करके किसी सरणी को असाइन करते समय कोष्ठक के बीच सब कुछ एक कमांड के पैरामीटर की तरह विस्तारित हो जाता है, जिससे प्रत्येक" पैरामीटर "सरणी के तत्व में बदल जाता है। – svckr