元素未附加到循环中的数组
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
我正在编写一个 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