Shell 数组 | https://www.runoob.com/linux/linux-shell-array.html
极简
array_name=(value1 value2 ... valuen)
array_name[0]=value0
读取数组元素值:${array_name[index]}
获取所有元素:echo "数组的元素为: ${my_array[*]}"
获取元素个数:echo "元素个数为: ${#my_array[*]}"
key-value
declare -A array_name
array_name["google"]="www.google.com"
array_name["index"]
获取数组的所有键:echo "键为: ${!site[*]}"
简述
Bash Shell 只支持一维数组(不支持多维数组)
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
 array_name=(value1 value2 ... valuen)
也可以使用数字下标来定义数组:
 array_name[0]=value0
 array_name[1]=value1
 array_name[2]=value2
读取数组元素值的一般格式是:
 ${array_name[index]}
关联数组
declare -A array_name
 -A 选项就是用于声明一个关联数组。
关联数组的键是唯一的。
以下实例我们创建一个关联数组 site,并创建不同的键值:
实例
 declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")
 我们也可以先声明一个关联数组,然后再设置键和值:
实例
 declare -A site
 site["google"]="www.google.com"
 site["runoob"]="www.runoob.com"
 site["taobao"]="www.taobao.com"
访问关联数组元素可以使用指定的键,格式如下:
array_name["index"]
获取数组中的所有元素
 使用 @ 或 * 可以获取数组中的所有元素
 echo "数组的元素为: ${my_array[*]}"
 echo "数组的元素为: ${my_array[@]}"
获取数组长度的方法与获取字符串长度的方法相同
 echo "数组的元素个数为: ${#my_array[*]}"
 echo "数组的元素个数为: ${#my_array[@]}"
获取数组的所有键
 echo "数组的键为: ${!site[*]}"
 echo "数组的键为: ${!site[@]}"
shell 数组遍历的3种方法
- 标准的for循环
 - for … in循环方法
 - While循环法
 
 
    echo "***************************************"
     echo "shell 数组遍历的3种方法"
     echo "创建一个数组"
     array=( A B C D 1 2 3 4)
     
     echo "1.标准的for循环"
     for(( i=0;i<${#array[@]};i++)) do
     #${#array[@]}获取数组长度用于循环
     echo ${array[i]};
     done;
  
     echo "2.for … in"
     echo "2.1 遍历(不带数组下标)"
     for element in ${array[@]}
     #也可以写成for element in ${array[*]}
     do
     echo $element
     done
  
     echo "2.2 遍历(带数组下标)"
     for i in "${!array[@]}";   
     do 
     printf "%s\t%s\n" "$i" "${array[$i]}"  
     done
    
    echo "3.While循环法"
    i=0  
    while [ $i -lt ${#array[@]} ]  
    #当变量(下标)小于数组长度时进入循环体
    do  
     echo ${array[$i]}  
     #按下标打印数组元素
     let i++  
    done
  
遍历
 cnt=${#my_array[@]}
 for ((i=0;i < ${cnt};i++))
 do
 echo ${array_name[i]}
 done
  
空数组
vim ./test.sh
#!/bin/bash
 #
 arry2=(That sa non empty array)
 array3=()
 array4=('')
 #
 ARRAY()
 {
 echo "Element of arry2 is:${array2[@]}."
 echo "Element of array3 is:${array3[@]}."
 echo "Element of array4 is:${array4[@]}."
 }
ARRAY
array3[0]="my"
 array3[2]="u"
ARRAY
array4[5]=9
 echo "len of array3 is:${#array3[@]}."
 echo "Element of array4 is:${array4[@]}."
 echo "len of array4 is:${#array4[@]}."
[root@localhost vmshare]# ./test.sh
 Element of arry2 is:.
 Element of array3 is:.
 Element of array4 is:.
 Element of arry2 is:.
 Element of array3 is:my u.
 Element of array4 is:.
 len of array3 is:2.
 Element of array4 is: 9.
 len of array4 is:2.
  










