数组定义方法
(30 20 10 60 50 40) 0 1 2 3 4 5
方法一:
数组名= (value0 value1 value2 .. .) ==元素值之间要有空格==
==数组的表示方法一==
方法二:
数组名=([0]=value [1]=value [2]=value ...) ==数组的表示方法二==
方法三:
列表名="value0 value1 value2 ... " 数组名=($列表名) ==数组的表示方法三==
方法四:
数组名[0]="value" 数组名[1]="value" 数组名[2]="value" ==数组的表示方法四==
数组包括的数据类型
数值类型 字符类型: 使用"’"或''定义 获取数组长度 arr_ number=(1 2 3 4 5) arr_ length=$ {#arr_ number[] } ${#arr_ number[@] } echo $arr_ length ==输出数组的长度== 获取数据列表 echo ${arr_ number[] } echo ${arr_ number[@] } 读取某下标赋值 arr_ index2=${arr_ number [2] } echo $arr_ index2 ==查看数组下标的值==
数组遍历 #! /bin/bash arr number=(1 2 3 4 5) for V in ${arr_ number[@] } do echo $v done ==数组遍历==
==用遍历的方法去检查数组是否少元素==
数组切片 arr=(1 2 3 4 5) echo ${arr[@] } #输出整个数组 echo ${arr[@] :0:2} #获取${数组名[@或*] :起始位置:长度}的值*
echo ${arr1[ ]:1:3} echo ${arr[@] :2:3} ==数组的切片==
数组替换 arr=(1 2 3 4 5) echo ${arr[@]/4/66} #${数组名[@或*]/查找字符/替换字符} echo ${arr[@] } . #并不会替换数组原有内容 arr=(${arr[@]/4/66}) #要实现改变原有数组,可通过重新赋值实现 echo ${arr[@]}
==数组的替换这里是把30替换成66==
数组删除 arr=(12345) unset arr . #删除数组 echo ${arr[] } arr=(12345) unset arr[2]
删除第三个元素 echo ${arr[*] }
==删除数组==
数组追加元素 方法一: array. name [ index]=value ==添加元素到数组方法一==
方法二: array_ name[$ {#array_ name[@]}]=value ==数组追加元素方法二== 方法三: array_ name=("${array_ name[@]}" value1 . .. valueN) 双引号不能省略,否则,当数组array_ name中存在包含空格的元素时会按空格将元素拆分成多个不能将“@”替换为“ * ” 如果替换为“* ”,不加双引号时与“@”"的表现一致,加双引号时,会将数组array_ name中的所有元素作为一个元素添 加到数组中 for i in "${array_ name[@]}"; do echo $i; done ==数组追加元素方法三==
方法四: array_ name+= (value1... valueN) 待添加元素必须用“()"包围起来,并且多个元素用空格分隔 ==数组追加元素方法四==
向函数传数组参数
函数外 函数名${数组名[@] }
使用${数组名[@]} 获取数组的列表,再用这个列表作为参数给函数传递
函数内 使用$@接收参数列表,再用数组名=($@) 在函数内生成一个的数组
如果将数组变量作为函数参数,函数只会取数组变量的第一个值。 test1 () { echo "接收到的参数列表: $@" newarrary=($1) echo "新数组的值为: $ {newarrary[ * ] }" }
array=(3 2 1 4 5) echo " 原始数组的值为: ${array[ * ] }" test1 $array ==函数内传送数组==
==函数内传送数组脚本执行结果== 解决这个问题则需要将数组变量的值分解成单个的值,然后将这些值作为函数参数使用。在函数内部,再将所有的参数重新组合成“个新 的数组变量。
test2 () {
newarrary= ($ (echo $@)) echo "新数组的值为: $ {newarrary[*] }"
}
array=(3 2 1 4 5) echo "原始数组的值为: ${array[*]}" test2 ${array[ * ] } ==从函数外部传多个值到函数内部== ==函数外部传多个值到函数内部脚本执行结果==
从函数返回数组 test2 () { newarrary=('echo $@") sum=0 for value in $ {newarrary[*]} do sum=$[$sum + $value] done echo $ sum
} ==从函数返回数组脚本==
==从函数返回数组脚本执行结果== test3 () { newarrary=('echo $@`) for ((i=0; i<=$[$# - 1]; i++))
{
newarrary[$i]=$[$ {newarrary[$i]} * 2]
}
echo $ {newarrary[ * ]}
}
array=(3 2 1 4 5)
echo "原始数组的值为: ${array[ * ] }"
result1=test2 ${array[ * ] }
echo "新数组的和为: $result1"
result2=(test3 ${array[ * ]}
)
echo "新数组的值为: ${result2[ * ] }"
==从函数返回数组第三种方式== ==从函数返回数组第三种方式脚本的执行结果==