OS : उबंटू 16.04.3
शैल : बैश 4.3.48
मुझे पता है कि अस्थायी रूप में के रूप में एक चर की सामग्री को बदलने के लिए संभव है var=value command, शायद जा रहा है IFS= read -r varइस का सबसे उल्लेखनीय मामला।
और, ग्रेग की विकी के लिए धन्यवाद , मैं भी समझता हूं:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
मेरी समझ से क्या बचता है:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
जहां तक मुझे पता है (और पिछले उदाहरणों के तर्क का अनुसरण), तो इसे प्रिंट करना चाहिए bar, नहीं (bar baz)।
क्या यह केवल मेरे लिए होता है? क्या यह इच्छित व्यवहार है और मुझे कुछ याद आ रहा है? या यह एक बग है?
export var=(foo bar); echo "${var[0]}"इसे प्रिंट करता हूं foo, तो नहीं (foo bar)।
exportपता चलता है:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_arrayयहां कोई आउटपुट नहीं दिया गया है।
foo() { declare -p var; } ; var=(bar baz) fooहै declare -x var="(bar baz)"कि इसे एक स्ट्रिंग के रूप में माना जाता है, न कि एक सरणी