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

时间:2017-12-05 17:04:16

标签: arrays bash shell ksh

我正在编写一个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中的答案是可以接受的,因为我似乎在两者中都有相同的问题。

1 个答案:

答案 0 :(得分:2)

您正在子shell中运行while循环,因此一旦shell退出,您对该阵列所做的任何更改都将消失。改为使用输入重定向:

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

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

readArray -t myArr < doc.txt