में अप्रत्यक्ष चर काम लगता है कि पार्टी में अप्रत्यक्ष चर सेटिंग करने की सिफारिश की जिस तरह से उपयोग करने के लिए eval
है:बैश
var=x; val=foo
eval $var=$val
echo $x # --> foo
समस्या
eval
साथ हमेशा की तरह एक है:
var=x; val=1$'\n'pwd
eval $var=$val # bad output here
(और चूंकि इसे कई स्थानों पर अनुशंसा की जाती है, मुझे आश्चर्य है कि इस वजह से कितनी स्क्रिप्ट कमजोर हैं ...)
किसी भी मामले में, Usin का स्पष्ट समाधान ग्राम (भाग निकले) उद्धरण वास्तव में काम नहीं करता है:
var=x; val=1\"$'\n'pwd\"
eval $var=\"$val\" # fail with the above
बात यह है कि पार्टी अप्रत्यक्ष चर संदर्भ (${!foo}
के साथ) में पकाया गया है, लेकिन मैं अप्रत्यक्ष काम करने के लिए किसी भी तरह के रास्ते नहीं दिख रहा है - है ऐसा करने के लिए कोई सौहार्दपूर्ण तरीका है?
रिकॉर्ड के लिए, मैं एक समाधान खोजने के किया था, लेकिन यह कुछ है कि मैं विचार करूँगा "समझदार" नहीं है ...:
eval "$var='"${val//\'/\'\"\'\"\'}"'"
आरएचएस पर अविवेक मैं के लिए क्या देख रहा हूँ नहीं है। –
(* माथे-स्लैप *) बह, मैं पूरी तरह से चूक गया कि क्यों मैं * आरएचएस पर संकेत चाहता हूं। चूंकि आपका उत्तर इसके बारे में बात नहीं करता है, इसलिए मैं अब इसे संपादित कर दूंगा, जवाब देने के बजाय-खुद-और-पेट-मेरी-बैक ... –
शानदार! अतीत में मैंने कुछ जटिल 'eval eval export' बकवास किया था। तुम्हारा बहुत शुक्रिया हमेशा। Googlers के लिए, उपरोक्त उत्तर के साथ जाओ, eval eval निर्यात प्रारूप नहीं। – bgStack15