Puedo hacer que esto funcione en ksh pero no en bash, lo que realmente me está volviendo loco. Afortunadamente es algo obvio que estoy pasando por alto.bash problema al asignar a un índice de matriz en un bucle
Necesito ejecutar un comando externo donde cada línea de la salida se almacenará en un índice de matriz.
Este ejemplo simplificado parece que está configurando la matriz en el ciclo correctamente; sin embargo, después de que el ciclo haya completado esas asignaciones de matriz se han ido? ¿Es como si el lazo fuera tratado completamente como un caparazón 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[@]}
salida
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
Así, mientras que en el bucle, asignamos array [i] y el eco lo verifica. Pero después del ciclo volví a la matriz [0] que contenía "hola" sin ningún otro elemento.
Los mismos resultados en bash 3, 4 y diferentes plataformas.
"Necesito ejecutar un comando externo donde cada línea de la salida se almacenará en un índice de matriz." El "gato" fue un ejemplo simplificado. Necesito ejecutar un comando y obtener su salida en el bucle y una redirección como
user1596414
Actualizado con algunas opciones. El último (si tu versión de bash es lo suficientemente nueva) es probablemente la que quieres. – chepner
+1 funciona un archivo temporal o bash 4.2 (o posterior). Hay una tercera opción que usa IFS para manejar espacios en blanco y se puede combinar con una asignación de matriz simple si no hay necesidad de iterar a través de la salida también. – user1596414