2008-12-16 9 views
6

मैं पहली बार तर्क के रूप में स्क्रिप्ट उपयोगकर्ता से एक चर के नाम के साथ चर बदल सकते हैं और मैं गूंज के मूल्य को वापस कंसोल के लिए चर ने कहा:इनपुट के रूप में एक चर के नाम प्राप्त करें और उस नाम

#!/bin/bash 
variablename=$1 
echo "The value of $variablename is: " ${!variablename} 

यह बहुत अच्छा काम करता है!

मैं जो काम नहीं कर सकता वह यह है कि यदि मैं उस चर को उपयोगकर्ता से दूसरे तर्क के मान में बदलना चाहता हूं। एक सिंटैक्स त्रुटि वाला एक उदाहरण है:

#!/bin/bash 
variablename=$1 
echo "The value of $variablename is: " ${!variablename} 
echo "I will now try to change the value into $2." 
(!variablename}=$2 
# The above line generates: {!variablename}=2: command not found 

दूसरे शब्दों में: यदि यह संभव है, मैं कैसे एक चर नाम उपयोगकर्ता और दोनों पढ़ने (पहले से ही हल) से मिलता है और कहा चर करने के लिए लिख सकता हूँ?

उत्तर

7

मैं एक फ्लैश अचानक, मिनट के सभी मदद के लिए पूछ के बाद किया था, और मुझे लगता है कि मैं एक समाधान है:

#!/bin/bash 
variablename=$1 
echo "The value of $variablename is: " ${!variablename} 
echo "I will now try to change the value into $2." 
eval "$variablename=$2" 
echo "Success! $variablename now has the value ${!variablename}!" 

यह काम करता है। क्या कोई बेहतर तरीका है?

+1

नहीं, eval जाने का सही तरीका है। आपको $ 2 में रिक्त स्थान के बारे में चिंता करने की आवश्यकता हो सकती है, हालांकि - और एकल उद्धरण और डबल कोट्स और बैकस्लाश। –

+0

मुझे जोर देने के लिए धन्यवाद मैं सही रास्ते पर हूं। यदि मैं किसी भी पुन: प्रयोज्य मूल्य का कुछ बना देता हूं तो मैं कुछ पैरामीटर सत्यापन करूंगा। फिलहाल मैं अधिकतर गहराई से समझने की कोशिश कर रहा हूं। :-) –

1

आपका समाधान काम करेगा लेकिन परिवर्तनीय के पास केवल आपकी स्क्रिप्ट के भीतर वह मान होगा। यह "कॉलिंग" एप्लिकेशन के चर को प्रभावित नहीं करेगा।

जब आप कोई स्क्रिप्ट या प्रोग्राम चलाते हैं तो यह पर्यावरण की एक प्रति के साथ एक नया खोल बनाता है। यह डिज़ाइन द्वारा है इसलिए आपकी स्क्रिप्ट PATH जैसी चीजों को संशोधित नहीं करती है।

यदि आप चाहते हैं कि आपकी स्क्रिप्ट कॉलिंग शैल के लिए पर्यावरण चर को संशोधित करने में सक्षम हो, तो आपको source scriptname या की आवश्यकता होगी। यह है कि कैसे .bashrc काम करता है।

+0

अतिरिक्त जानकारी के लिए धन्यवाद! "स्रोत स्क्रिप्टनाम" ने इसके लिए ठीक काम किया। क्या आप ".scriptname" पर थोड़ा सा विस्तार कर सकते हैं क्योंकि मुझे उस दृष्टिकोण को समझ में नहीं आया? –

+0

स्रोत स्क्रिप्टनाम अनिवार्य रूप से वही है, लेकिन यह स्रोत के बजाय डॉट का उपयोग करके विशिष्ट बैश विशिष्ट है पॉज़िक्स संगत –

+0

वाक्यविन्यास "। Scriptname" है, न कि ".criptname"। डॉट कमांड स्रोत कमांड का पर्याय बन गया है। – converter42

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

  • कोई संबंधित समस्या नहीं^_^