2013-08-14 8 views
5

बस एक साधारण सवालबैश में, एक चर का उपयोग किसी अन्य चर के नाम के हिस्से के रूप में कैसे करें?

मैं कुछ सरणियों है:

a=0 
echo ${array_"$a"[0]} 

एक बुरी प्रतिस्थापन त्रुटि मिली:

array_0=(1 2 3) 
array_1=(1 2 3) 
....... 

मैं एक चर एक है। क्या कोई सही वाक्यविन्यास जानता है?

उत्तर

1

आप eval उपयोग कर सकते हैं:

#!/bin/bash 
array_0=(1 2 3) 
array_1=(4 5 6) 
array_2=(7 8 9) 
for a in {0..2} ; do 
    for i in {0..2} ; do 
    eval 'echo ${'"array_$a[$i]"'}' 
    done 
done 

वॉन केटो के वाक्य रचना से थोड़ा अधिक वर्बोज़ है, लेकिन echo बयान ही अधिक स्पष्ट करने योग्य है। आप इन दो पंक्तियों के साथ डबल for पाश के भीतरी भाग की जगह:

array_a=array_$a[$i] 
    echo ${!array_a} 
+0

क्या आप जानते हैं कि एक स्वयं एक सरणी है या नहीं। उदाहरण के लिए, मैं $ {array_2 [$ j]} –

+0

@HaoShen के साथ $ a को प्रतिस्थापित करता हूं: समाधान के लिए ऐसा करने में कोई समस्या नहीं होनी चाहिए। – jxh

+0

हाय, बहुत बहुत धन्यवाद। मैं बस अटक गया। अगर मैं एक चर को परिणाम असाइन करना चाहता हूं तो क्या होगा। उदाहरण के लिए, 'परिणाम = $ {' "array_ $ a [$ i]" '}' eval। यह काम नहीं करता है ... मेरे निरंतर बेवकूफ प्रश्न के लिए खेद है ... –

1

आप उपयोग कर सकते हैं eval

echo $(eval echo \${array_$a[0]}) 

ध्यान दें कि मैं पहली बार डॉलर चिह्न के सामने एक बैकस्लैश डाल करने के लिए रोकने के लिए किया था उस अंतर को खोलने से खोल।

कहने की जरूरत नहीं, सरणियों का पूरा उद्देश्य आप सभी उपद्रव के बिना चर प्रक्षेप के इस प्रकार करते हैं और गूंज evals की चिंता है कि मैं जब मैं मूल बॉर्न शैल के साथ सरणियों की जरूरत नहीं था की अनुमति है। के रूप में पहली चरित्र इंगित करता है कि आप अविवेक की एक अतिरिक्त स्तर का उपयोग करना चाहते चर का मूल्यांकन और उसके बाद के रूप में परिणाम का उपयोग करके

array_a=array_$a[0] 
echo ${!array_a} 

!:

5

एक बात आप कर सकते हैं इस वाक्य विन्यास का उपयोग करने के लिए है अभिव्यक्ति।

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

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