Bash-Probleme beim Zuweisen zu einem Array-Index in einer Schleife

Ich kann das in ksh zum Laufen bringen, aber nicht in bash, was mich wirklich verrückt macht. Hoffentlich ist etwas klar, was ich übersehen habe.

Ich muss einen externen Befehl ausführen, bei dem jede Zeile der Ausgabe an einem Array-Index gespeichert wird.

Dieses vereinfachte Beispiel sieht so aus, als würde es das Array in der Schleife korrekt setzen. Es ist, als würde die Schleife vollständig als externe Shell behandelt.

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[@]}

Ausgabe

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

Während wir uns in der Schleife befinden, weisen wir Array [i] zu und das Echo überprüft es. Aber nach der Schleife bin ich wieder bei Array [0], das "Hallo" ohne andere Elemente enthält.

Gleiche Ergebnisse für Bash 3, 4 und verschiedene Plattformen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage