Я могу заставить это работать в ksh, но не в bash, что действительно сводит меня с ума. Надеюсь, это что-то очевидное, что я не замечаю.
Мне нужно запустить внешнюю команду, где каждая строка вывода будет храниться в индексе массива.
Этот упрощенный пример выглядит так, как будто он правильно устанавливает массив в цикле, однако после завершения цикла эти назначения массива исчезают? Это как если бы петля полностью рассматривалась как внешняя оболочка?
мусор.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[@]}
Выход
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
Итак, в цикле мы присваиваем массив [i], и эхо проверяет это. Но после цикла я возвращаюсь к массиву [0], содержащему «привет» без других элементов.
Одинаковые результаты для bash 3, 4 и разных платформ.