System operacyjny : Ubuntu 16.04.3
Powłoka : Bash 4.3.48
Wiem, że można tymczasowo zmienić zawartość zmiennej jak w var=value command, prawdopodobnie jest IFS= read -r varto najbardziej znaczący przypadek.
I dzięki wiki Grega , rozumiem też:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
To, co wymyka się mojemu zrozumieniu, to:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
O ile mi wiadomo (i zgodnie z logiką poprzednich przykładów), powinien drukować bar, a nie (bar baz).
Czy to mi się tylko zdarza? Czy to jest zamierzone zachowanie i czegoś mi brakuje? Czy to błąd?
export var=(foo bar); echo "${var[0]}"drukuje foo, nie (foo bar).
exportgo pokazuje:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_arraydaje tutaj żadnego wyniku.
foo() { declare -p var; } ; var=(bar baz) foodaje declare -x var="(bar baz)"potwierdzenie, że jest traktowany jako ciąg, a nie tablica