Bash关联数组布尔键遍历次数异常原因咨询
问题原因解析:Bash关联数组的键唯一性特性
这其实是踩了Bash关联数组的核心特性坑——关联数组的键是唯一的字符串标识,具体拆解如下:
键的本质是字符串
你的代码里key1=true和key2=true,这两个变量的取值都是字符串"true"。当你用[$key1]和[$key2]作为关联数组的键时,本质上是在重复使用同一个字符串键"true"。重复键会直接覆盖值
声明数组时的代码:declare -A arr=( [$key1]=$filter_param1 [$key2]=$filter_param2 )相当于先执行
arr["true"]="filter1",紧接着又执行arr["true"]="filter2"——后面的赋值直接覆盖了同一个键对应的旧值,最终数组里只有一个键值对:"true" => "filter2"。同理,如果key1和key2同为false,也是同一个键,数组里同样只有一个条目。不同键会保留独立条目
当key1和key2一个是true一个是false时,这是两个完全不同的字符串键,数组里会生成两个独立的键值对:"true" => "filter1"和"false" => "filter2",所以遍历的时候会循环两次。
直观验证小技巧
你可以在遍历前加一行代码,查看数组的键数量:
echo "数组键的总数:${#arr[@]}"
当key1和key2相同时,输出是1;不同时输出是2,这就能直观验证上面的结论。
内容的提问来源于stack exchange,提问作者Ananth Upadhya
相关产品推荐
相关产品推荐

