元素未附加到循环中的数组

Elements not being appended to array in loop

我正在编写一个 Bash Shell 脚本,它从一个文件中读取一堆行,并尝试将每一行附加到一个数组中,因此:

# counter variable    
i=0

cat doc.txt | while read -r line; do
    myArr[i]="$line"
    ((i=i+1))
done

文件doc.txt每行一个词。当我打印数组时(通过 echo ${myArr[@]}for x in ${myArr[@]};do echo $x; done),我的数组似乎是空的。我究竟做错了什么?谢谢!

编辑:我也尝试在 Ksh 中这样做,结果相同。 Bash 或 Ksh 中的答案是可以接受的,因为我似乎在两者中都遇到了同样的问题。

您是 运行 子 shell 中的 while 循环,因此一旦 shell 退出,您对数组所做的任何更改都会消失。改为使用输入重定向:

while IFS= read -r line; do
    myArr+=("$line")
done < doc.txt

如果您使用 bash 4.0 或更高版本,您可以使用单个命令

readArray -t myArr < doc.txt