SO : Ubuntu 16.04.3
Shell : Bash 4.3.48
Sé que es posible cambiar temporalmente el contenido de una variable como en var=value command
, siendo probablemente IFS= read -r var
el caso más notable de esto.
Y, gracias a la wiki de Greg , también entiendo:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
Lo que se me escapa es esto:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
Hasta donde yo sé (y siguiendo la lógica de los ejemplos anteriores), debería imprimir bar
, no (bar baz)
.
¿Esto solo me pasa a mí? ¿Es este el comportamiento previsto y me falta algo? ¿O es esto un error?
export var=(foo bar); echo "${var[0]}"
imprime foo
, no (foo bar)
.
export
muestra:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
no da salida aquí.
foo() { declare -p var; } ; var=(bar baz) foo
da declare -x var="(bar baz)"
lo que confirma su ser tratada como una cadena, no una matriz