gpt4 book ai didi

arrays - bash:如何更新隐式子 shell 中的关联数组?

转载 作者:行者123 更新时间:2023-11-29 08:59:22 38 4
gpt4 key购买 nike

问题:我无法在 while 循环中更新数组。一个例子(不是实际问题):

declare -A wordcounts
wordcounts["sentinel"]=1000
ls *.txt | while read f; do
# assume that that loop runs multiple times
wordcounts[$f]=$(wc -w $f)
echo ${wordcounts[$f]} # this prints actual data
done
echo ${!wordcounts[@]} # only prints 'sentinel'

这不起作用,因为管道后的循环在子 shell 中运行。循环对变量 wordcounts 所做的所有更改仅在循环内可见。

export wordcounts 没有帮助。

唉,我似乎需要管道while read部分,所以使用for重写上面代码的方法不是什么我在找。

是否有合法的方法来更新循环内的关联数组形式,或者一般的子 shell?

最佳答案

因为你有一个复杂的命令管道,你正在阅读,你可以使用以下内容:

while read f; do
# Do stuff
done < <(my | complex | command | pipe)

语法 <(command)在子 shell 中运行命令并将其标准输出作为临时文件打开。您可以在通常在命令中使用文件的任何地方使用它。

此外,您还可以使用语法 >(command)而是将标准输入作为文件打开。

关于arrays - bash:如何更新隐式子 shell 中的关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19163573/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com