Sistema operativo : Ubuntu 16.04.3
Shell : Bash 4.3.48
So che è possibile modificare temporaneamente il contenuto di una variabile come in var=value command
, essendo probabilmente IFS= read -r var
il caso più notevole di questo.
E, grazie al wiki di Greg , capisco anche:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
Ciò che sfugge alla mia comprensione è questo:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Per quanto ne so (e seguendo la logica degli esempi precedenti), dovrebbe stampare bar
, no (bar baz)
.
Questo succede solo a me? È questo il comportamento previsto e mi manca qualcosa? O è un bug?
export var=(foo bar); echo "${var[0]}"
stampa foo
, no (foo bar)
.
export
mostra:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
non fornisce alcun output qui.
foo() { declare -p var; } ; var=(bar baz) foo
dà la declare -x var="(bar baz)"
conferma che viene trattato come una stringa, non un array