Shell-數組和關聯數組

預備知識

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>

這是自由軟件,您可以自由地更改和重新發布。
在法律允許的範圍內沒有擔保.

實戰演練

索引數組

  1. 單行中定義

    array_var=(1 2 3 4 5 6)
    
  2. 將數組定義成一組“索引 - 值”

    array_var[0]="test1"
    array_var[1]="test2"
    array_var[2]="test3"
    array_var[3]="test4"
    array_var[4]="test5"
    array_var[5]="test6"
    
  3. 打印第一個元素值

     echo ${array_var[0]}
    
  4. 打印出數組中的所有值

     echo ${array_var[*]}
    
  5. 打印數組長度

    echo ${#array_var[*]}
    

關聯數組

類似Java中的Map,或數據結構說的字典結構。

  1. 定義

    declare -A fruits_value
    
  2. 利用內嵌“索引 - 值”列表的方法,提供一個“索引 - 值”列表

    fruits_value=([apple]='100 dollars' [orange]='150 dollars')
    
  3. 使用獨立的“索引 - 值”進行賦值

    fruits_value[peach]='60 dollars'
    
  4. 列出所有數組索引(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 .
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章