加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash在循环中填充数组

发布时间:2020-12-15 22:50:17 所属栏目:安全 来源:网络整理
导读:如何在循环中填充数组?我想做那样的事情: declare -A resultsresults["a"]=1results["b"]=2while read data; doresults[$data]=1donefor i in "${!results[@]}"do echo "key : $i" echo "value: ${results[$i]}"done 但似乎我无法在for循环中向数组添加任
如何在循环中填充数组?我想做那样的事情:

declare -A results

results["a"]=1
results["b"]=2

while read data; do
results[$data]=1
done

for i in "${!results[@]}"
do
  echo "key  : $i"
  echo "value: ${results[$i]}"
done

但似乎我无法在for循环中向数组添加任何内容.为什么?

解决方法

你有什么应该工作,假设你有一个支持关联数组的Bash版本.

如果我可以猜测一下. . .你在运行这样的东西:

command_that_outputs_keys 
  | while read data; do
        results[$data]=1
    done

?那是 – 你的while循环部分是管道吗?如果是这样,那就是问题所在.您可以看到,管道中的每个命令都会收到shell执行环境的副本.因此while循环将填充结果数组的副本,并且当while循环完成时,该副本将消失.

编辑添加:如果这是问题,那么正如glenn jackman在评论中指出的那样,您可以使用process substitution来修复它:

while read data; do
    results[$data]=1
done < <(command_that_outputs_keys)

这样,虽然command_that_outputs_keys只接收shell的执行环境(如前所述),但while循环将具有原始的主环境,因此可以修改原始数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读