bash:测试是否存在关联数组条目,如果不存在则创建,如果

时间:2015-08-18 00:11:34

标签: bash

之后的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

2 个答案:

答案 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