Não entendo por que "${ARRAY[@]}"
é expandido para várias palavras, quando é citado ( "..."
)?
Tome este exemplo:
IFS=":" read -ra ARRAY <<< "foo:bar:baz"
for e in "${ARRAY[@]}"; do echo $e; done
foo
bar
baz
Qualquer outra variável que eu expanda entre aspas, digamos "${VAR}"
, resulta em uma única palavra:
VAR="foo bar baz"
for a in "${VAR}"; do echo $a; done
foo bar baz
Alguém pode explicar isso para um usuário iniciante do Linux?
Porque matrizes quando indexadas com
@
aspas duplas expandem para uma lista de elementos. Está documentado emman bash
"Arrays":Esse comportamento é necessário se um elemento contiver espaços em branco ou caracteres da variável $IFS.
Resultado:
Se você quiser que a matriz seja expandida como uma única string (com os elementos da matriz delimitados pelo primeiro caractere de
$IFS
, por padrão um espaço), use"${arr[*]}"
.A sintaxe
"${arr[@]}"
e"${arr[*]}"
para expansão de array é análoga a"$@"
e"$*"
para os parâmetros posicionais.