OS : Ubuntu 16.04.3
Shell : Bash 4.3.48
Je sais qu'il est possible de changer temporairement le contenu d'une variable comme dans var=value command
, étant probablement IFS= read -r var
le cas le plus notable de cela.
Et, grâce au wiki de Greg , je comprends aussi:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
Ce qui échappe à ma compréhension, c'est ceci:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Pour autant que je sache (et en suivant la logique des exemples précédents), il devrait imprimer bar
, non (bar baz)
.
Est-ce que cela m'arrive seulement? Est-ce le comportement souhaité et il me manque quelque chose? Ou est-ce un bug?
export var=(foo bar); echo "${var[0]}"
il imprime foo
, non (foo bar)
.
export
montre:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
ne donne aucune sortie ici.
foo() { declare -p var; } ; var=(bar baz) foo
donne la declare -x var="(bar baz)"
confirmation qu'il est traité comme une chaîne, pas comme un tableau