一、数组

1.数组定义方法

方法一:
数组名= (value0 valuel value2 ...)
方法二:
数组名=([0]=value [1]=value [2]=value ...)
方法三:
列表名="value0 valuel value2 ..."数组名=($列表名)
方法四:(可用于追加,修改数组元素)
数组名[0]="value"数组名[1]="value"数组名[2]="value"

2.数组包括的数据类型

数值类型
 字符类型(字符串):使用" "或’ '定义,防止元素当中有空格,元素按空格分割。

3、获取数组长度

arr_number=(1 2 3 4 5)arr_length=${#arr_number[*]}           ${#arr_number[@]}echo $arr_length

4、获取数据列表

echo ${arr_number[*]}
或echo ${arr_number[@]}

5、读取某索引赋值

arr_index2=${arr_number[2]}
echo $arr_index2

6、数组遍历

#!/bin/bash
arr_number=(1 2 3 4 5)
for v in ${arr_number[@]}
do
echo $v
done
或
#!/bin/bash
arr_number=(1 2 3 4 5)
length=${#arr[*] }
for ((i=0; i<length; i++))
do
echo ${arr[$i]}
done

7、数组切片

arr=(1 2 3 4 5)
echo ${arr[@]}                  #输出整个数组
echo ${arr[@]:0:2}     #获取${数组名[@或*]:起始位置(下标表示):长度的值}

8、数组替换

arr=(1 2 3 4 5)
echo ${arr[@]/4/66}      #${数组名[@或*]/查找字符/替换字符}  
echo ${arr[@]}           #并不会替换数组原有内容

arr=(${arr[@]/4/66})     #要实现改变原有数组,可通过重新赋值实现
echo ${arr[@]}

9、数组删除

arr=(1 2 3 4 5)
unset arr    #删除数组
echo ${arr[*]}

arr=(1 2 3 4 5)
unset arr[2]    #删除第三个元素
echo ${arr[*]}

10、数组追加元素

方法一:按照索引进行逐个添加
array_name[index]=value

方法二:按照最大索引值进行向后添加
array_name[${#array_name[@]}]=value

方法三:使用原数组的元素进行重新赋值
array_name=("${#array_name[@]}" value1 value2 ... valueN)

注:
双引号不能省略,否则数组中存在包含空格的元素时会按空格将元素拆分成多个
不能将“@”替换为“*”,如果替换为“*”,不加双引号时与“@”的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中

方法四:
array_name+=(value1 value2 ... valueN)

注:待添加元素必须用“()”包围起来,并且多个元素用空格分隔

11、向函数传递数组参数

如果将数组变量作为函数参数,函数只会取数组变量的第一个值。
test1() {
    echo "接收到的参数列表: $1"
    newarrary=($1)
    echo "新数组的值为: ${newarrary[*]}"
}
#-----main-----
array=(3 2 1 4 5)
echo "原始数组的值为: ${array[*]}"
test1 $array

解决这个问题则需要将数组变量的值分解成单个的值,然后将这些值作为函数参数使用。
在函数内部,再将所有的参数重新组合成一个新
的数组变量。

test2 (){
   echo "接收到的参数列表: $@"
   newarrary=($(echo $@))
   echo "新数组的值为: ${newarrary[*]}"
}
#-----main-----
array=(3 2 1 4 5)
echo "原始数组的值为: ${array[*]}"
test1 ${array[*]}

总结:想向函数传递数组参数,在函数外把数组传递到函数内
函数外:
函数名  ${数组名[*]}
  #使用 ${数组名[*]} 获取数组的列表,再用这个列表作为参数给函数传递
函数内:
 使用 $@ 接受参数列表,再用 数组名=($@) 在函数内生成一个新的数组