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 var
merupakan 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)
.
export
menunjukkan:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
tidak memberikan output di sini.
foo() { declare -p var; } ; var=(bar baz) foo
memberi declare -x var="(bar baz)"
konfirmasi itu diperlakukan sebagai string, bukan array