bash kłopoty z przypisaniem do indeksu tablicy w pętli
Mogę to zrobić w ksh, ale nie w bashu, co naprawdę doprowadza mnie do szału. Mam nadzieję, że to coś oczywistego.
Muszę uruchomić polecenie zewnętrzne, w którym każdy wiersz wyjścia będzie przechowywany w indeksie tablicy.
Ten uproszczony przykład wygląda tak, jakby poprawnie ustawiał tablicę w pętli, ale po zakończeniu pętli przypisania tablic zniknęły? To tak, jakby pętla była traktowana całkowicie jako zewnętrzna powłoka?
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[@]}
Wydajność
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
Tak więc w pętli przypisujemy tablicę [i], a echo ją weryfikuje. Ale po pętli wracam do tablicy [0] zawierającej „cześć” bez żadnych innych elementów.
Takie same wyniki w bash 3, 4 i różnych platformach.