ОС : Ubuntu 16.04.3
Оболочка : Bash 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)"
подтверждение того, что он рассматривается как строка, а не как массив