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.