OS : Ubuntu 16.04.3
Shell : Bash 4.3.48
Saya tahu itu mungkin untuk sementara mengubah konten variabel seperti var=value command, mungkin IFS= read -r varmerupakan kasus yang paling menonjol dari ini.
Dan, terima kasih kepada wiki Greg , saya juga mengerti:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
Apa yang luput dari pemahaman saya adalah ini:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Sejauh yang saya tahu (dan mengikuti logika dari contoh sebelumnya), itu harus dicetak bar, bukan (bar baz).
Apakah ini hanya terjadi pada saya? Apakah ini perilaku yang dimaksudkan dan saya kehilangan sesuatu? Atau ini bug?
export var=(foo bar); echo "${var[0]}"mencetak foo, tidak (foo bar).
exportmenunjukkan:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_arraytidak memberikan output di sini.
foo() { declare -p var; } ; var=(bar baz) foomemberi declare -x var="(bar baz)"konfirmasi itu diperlakukan sebagai string, bukan array