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循环将具有原始的主环境,因此可以修改原始数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |