之后的bash代码是什么:
declare -A map
执行以下操作:
1)如果地图中尚不存在字符串,请为其创建条目并将其计数(值)设置为1
2)如果字符串已经存在于地图中,请将计数(值)增加1?
使用的是Bash版本4.0。
基于@that其他人的回答,我试过了:
#!/bin/bash
input=("a" "b" "a")
declare -a map
for i in ${input[@]}
do
let 'map[$i]++'
echo "map[$i]=${map[$i]}"
done
运行时会生成以下内容 - 似乎不起作用:
$ maptest
map[a]=1
map[b]=2
map[a]=3
答案 0 :(得分:2)
这样做的方法是:
let '++map[$key]'
这取决于未设置值被视为0的事实。
答案 1 :(得分:0)
与declare -A
代替declare -a
时,(已编辑)问题中的代码示例可正常运行。所以接受的答案是正确的。
但是,如果与set -u
又名set -o nounset
一起使用,则会因map: unbound variable
解决方案是使用declare -iA
和+=
运算符,如下所示:
#!/bin/bash
set -o nounset
input=("a" "b" "a")
declare -iA map
for i in ${input[@]}
do
map[$i]+=1
echo "map[$i]=${map[$i]}"
done
产生以下输出:
map[a]=1
map[b]=1
map[a]=2