bash проблема с назначением индекса массива в цикле

Я могу заставить это работать в 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 и разных платформ.

7
задан user1596414 13 August 2012 в 20:59
поделиться