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 .
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章