ОС : Ubuntu 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)"
підтвердження, що його трактують як рядок, а не як масив