预备知识
Bash从4.0版本之后才开始支持关联数组。可以使用bash --version
查看。我的输出:
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>
这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.
实战演练
索引数组
-
单行中定义
array_var=(1 2 3 4 5 6)
-
将数组定义成一组“索引 - 值”
array_var[0]="test1" array_var[1]="test2" array_var[2]="test3" array_var[3]="test4" array_var[4]="test5" array_var[5]="test6"
-
打印第一个元素值
echo ${array_var[0]}
-
打印出数组中的所有值
echo ${array_var[*]}
-
打印数组长度
echo ${#array_var[*]}
关联数组
类似Java中的Map,或数据结构说的字典结构。
-
定义
declare -A fruits_value
-
利用内嵌“索引 - 值”列表的方法,提供一个“索引 - 值”列表
fruits_value=([apple]='100 dollars' [orange]='150 dollars')
-
使用独立的“索引 - 值”进行赋值
fruits_value[peach]='60 dollars'
-
列出所有数组索引(keys)
echo ${!fruits_value[*]} echo ${!fruits_value[@]}
关联数组<string, string>转json
#!/bin/bash
declare -A ass_array
ass_array[a]=apple
ass_array[b]=bee
echo ass_array[a]==>${ass_array[a]}
dict_json='{'
dict_index=0
for i in ${!ass_array[*]}
do
if [[ $dict_index = 0 ]]; then
dict_json="$dict_json\"$i\":\"${ass_array[$i]}\""
else
dict_json="$dict_json,\"$i\":\"${ass_array[$i]}\""
fi
let dict_index++
done
dict_json="$dict_json}"
if [[ ! -x /usr/bin/jq ]]; then
yum install -y jq
fi
echo $dict_json
echo $dict_json | jq .