2012-01-02 12 views
6

मैं a..x से सभी वर्णों के साथ एक चर x घोषित करने का प्रयास करता हूं। कमांड लाइन (बैश) पर, a..x का प्रतिस्थापन किसी भी टिक को w/o काम करता है।एक परिवर्तनीय घोषणा में बैश प्रतिस्थापन का उपयोग कैसे करें

$ echo {a..x} 
a b c d e f g h i j k l m n o p q r s t u v w x 

लेकिन के माध्यम से स्ट्रिंग के रूप में x={a..x} परिणाम {a..x} में चर को यह बताए। केवल x=$(echo {a..x}) काम करता है।

सवाल यह है: क्या यह असाइनमेंट का उचित तरीका है या मुझे अन्य चीजें करना है?

मुख्य उद्देश्य (अगर आप अभी भी उन्हें जरूरत लेकिन स्थितीय मापदंडों को बचाने के लिए सुनिश्चित हो), एक सरणी के अनुक्रम आवंटित जैसे,

disks=($(echo {a..x})) 
+1

ब्रेस विस्तार काम पर विफल रहता है, क्योंकि यह समर्थक एक सूची duces और चर केवल एक स्केलर मान स्वीकार करता है; बैश इस अर्थ में "स्मार्ट" है क्योंकि यह जानता है कि यह चर के लिए एक सूची असाइन नहीं कर सकता है, इसलिए यह इसे विस्तारित नहीं करता है, यही कारण है कि आप उन्हें उद्धृत किए बिना रिक्त स्थान वाले वैरिएबल असाइन कर सकते हैं, क्योंकि यह एक स्केलर वैल्यू बैश है अनुपस्थित होने पर भी सामग्री पर शब्द-विभाजन लागू नहीं करता है। सरणी हालांकि एक सूची स्वीकार करती है और उस स्थिति में दोनों ब्रेस विस्तार और शब्द-विभाजन होता है। –

उत्तर

5

तुम भी set उपयोग कर सकते हैं के लिए है:

set {a..x} 
x="[email protected]" 

सरणियों के लिए, ब्रेस विस्तार सीधे काम करता है:

disks=({a..x}) 
+0

'डी = ({ए..एक्स}); cmdline पर $ d' के साथ-साथ स्क्रिप्ट परिणामों में '0' केवल – tuergeist

+1

@tuergeist में echo करें, 'echo $ {d [@]} 'या' echo $ {d [*]} 'http: // tldp। संगठन/एलडीपी/abs/html/arrays.html –

+0

@akk: धन्यवाद! बेशक, केवल 'डी' केवल पहले तत्व को इंगित करता है। – tuergeist

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