Sistema operacional : Ubuntu 16.04.3
Shell : Bash 4.3.48
Eu sei que é possível alterar temporariamente o conteúdo de uma variável como em var=value command
, sendo provavelmente IFS= read -r var
o caso mais notável disso.
E, graças ao wiki de Greg , eu também entendo:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
O que escapa ao meu entendimento é o seguinte:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Tanto quanto eu sei (e seguindo a lógica dos exemplos anteriores), ele deve imprimir bar
, não (bar baz)
.
Isso só acontece comigo? Esse é o comportamento pretendido e estou perdendo alguma coisa? Ou isso é um bug?
export var=(foo bar); echo "${var[0]}"
, imprima foo
, não (foo bar)
.
export
lo mostra:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
não dá saída aqui.
foo() { declare -p var; } ; var=(bar baz) foo
dá declare -x var="(bar baz)"
confirmando que está sendo tratado como uma string, não uma matriz