problema bash atribuindo a um índice de matriz em um loop
Eu posso fazer isso funcionar em ksh, mas não em bash, o que realmente me deixa louca. Espero que seja algo óbvio que estou negligenciando.
Eu preciso executar um comando externo onde cada linha da saída será armazenada em um índice de matriz.
Este exemplo simplificado parece que está definindo a matriz no loop corretamente, no entanto, após o loop ter concluído essas atribuições de matriz sumiram? É como se o loop fosse tratado completamente como um shell externo?
junk.txt
this is a
test to see
if this works ok
testa.sh
#!/bin/bash
declare -i i=0
declare -a array
echo "Simple Test:"
array[0]="hello"
echo "array[0] = ${array[0]}"
echo -e "\nLoop through junk.txt:"
cat junk.txt | while read line
do
array[i]="$line"
echo "array[$i] = ${array[i]}"
let i++
done
echo -e "\nResults:"
echo " array[0] = ${array[0]}"
echo " Total in array = ${#array[*]}"
echo "The whole array:"
echo ${array[@]}
Saída
Simple Test:
array[0] = hello
Loop through junk.txt:
array[0] = this is a
array[1] = test to see
array[2] = if this works ok
Results:
array[0] = hello
Total in array = 1
The whole array:
hello
Então, enquanto no loop, nós atribuímos array [i] e o eco o verifica. Mas depois do loop estou de volta em array [0] contendo "olá" sem outros elementos.
Mesmos resultados em todas as bash 3, 4 e diferentes plataformas.