預備知識
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 .