我正在编写一个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中的答案是可以接受的,因为我似乎在两者中都有相同的问题。
答案 0 :(得分:2)
您正在子shell中运行while
循环,因此一旦shell退出,您对该阵列所做的任何更改都将消失。改为使用输入重定向:
while IFS= read -r line; do
myArr+=("$line")
done < doc.txt
如果您使用bash
4.0或更高版本,则可以使用单个命令
readArray -t myArr < doc.txt