Bash从4.0版本开始引入关联数组。
关联数组允许你使用非整型下表索引数组中的元素,类似于Perl中的哈希数组或者Python中的字典。Bash要求关联数组的键是唯一的,而值可以不唯一,在Bash内部键与值是一一对应的(即使有多个相同的值也是如此)。使用关联数组前应该先申明变量类型为关联数组类型:
bash_4.1 $ declare -A dict
然后就可以像使用普通数组一样使用它了:
bash_4.1 $ dict['a']=123 bash_4.1 $ dict['b']=123 bash_4.1 $ declare -p dict declare -A dict='([a]="123" [b]="123" )'
如果不声明关联数组的话,你得到的将是一个普通数组:
bash_4.1 $ odict['a']=3 bash_4.1 $ declare -p odict declare -a odict='([0]="3")'
那么如何像Perl和Python中那样,轻松愉快地获取Bash中关联数组的键或者值呢?我相信绝大多数人刚开始学习SEHLL编程时,都会为它蹩脚语法感到困惑,但是正是因为这些丑陋但却实用的语法,往往可以在我们脚本编程中成为解决某个问题出奇制胜的方法。Bash中关联数组的操作方法如下:
bash_4.1 $ declare -A dict=([A]=123 [B]=456 [C]=789) bash_4.1 $ echo ${!dict[*]} # 取关联数组所有键 A B C bash_4.1 $ echo ${!dict[@]} # 取关联数组所有键 A B C bash_4.1 $ echo ${dict[*]} # 取关联数组所有值 123 456 789 bash_4.1 $ echo ${dict[@]} # 取关联数组所有值 123 456 789 bash_4.1 $ echo ${#dict[*]} # 取关联数组长度 3 bash_4.1 $ echo ${#dict[@]} # 取关联数组长度 3 bash_4.1 $
遍历一个关联数组可以用下面的方法:
bash_4.1 $ declare -A dict=([bash]='4.1' [mysql]='5.5.29' [php]='5.2.17' [nginx]='1.15') bash_4.1 $ for lang in ${!dict[@]}; do printf "%-5s: %-6s\n" $lang ${dict[$lang]}; done nginx: 1.15 bash : 4.1 php : 5.2.17 mysql: 5.5.29 bash_4.1 $
转载于:https://blog.51cto.com/hifly/1325182