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)"
कि इसे एक स्ट्रिंग के रूप में माना जाता है, न कि एक सरणी