声明数组
declare -a array_name
数组初始赋值
-
array_name[xx]=value
其中 xx 表示下标,为大于等于 0 的整数数字 -
array_name=([xx]=value1 [yy]=value2 ...)
其中 xx 表示下标,为大于等于 0 的整数数字 -
array_name=(value1 value2 value3 ...)
或declare -a array_name=(value1 value2 value3 ...)
数组追加元素
array=("${array[@]}" "new element" )
或array[${#array[*]}]="new element"
复制数组
array2=("${array1[@]}" )
或array2="${array1[@]}"
获取单个、全部或连续的部分数组元素
-
${array_name[xx]}
获取下标为 xx 的单个元素 -
${array_name[@]}
或${array_name[*]}
获取所有元素。在有引号括起的情况下,"${array_name[@]}"
表示单独的数组元素,"${array_name[*]}"
表示数组元素整体,没有引号括起的情况下都表示单独的数组元素,类似$*
和$@
的区别 -
${array_name[@]:index:length}
获取连续的部分数组元素,其中:length
可省略。arrayZ=(one two three four five) # 提取所有元素 echo ${arrayZ[@]:0} # one two three four five # 提取下标从 1 开始 (包含) 的所有元素 echo ${arrayZ[@]:1} # two three four five # 提取下标从 1 开始 (包含) 的 2 个元素 echo ${arrayZ[@]:1:2} # two three
获取数组元素个数
${#array_name[*]}
或${#array_name[@]}
获取数组某个元素的字符串长度
${#array_name[xx]}
提取数组中某个元素的部分字符串
${array_name[xx]:index:length}
, 其中:length 可省略
删除数组或数组元素
-
unset array_name[xx]
删除下标为 xx 的数组元素,等同于array_name[xx]=
-
unset array_name
删除整个数组
数组元素的字符串替换 / 删除操作
通常情况下,形如 ${name...}
表示法的字符串操作都可以应用在数组上,使用 ${name[@]...}
或${name[*]...}
的方式。
-
子字符串移除
arrayZ=(one two three four five five) # 从每个元素的最左侧进行最短匹配,并删除匹配的字符串 echo ${arrayZ[@]#fiv} # one two three four e e echo ${arrayZ[@]#t*e} # one two e four five five # 从每个元素的最左侧进行最长匹配,并删除匹配的字符串 echo ${arrayZ[@]##t*e} # one two four five five # 从每个元素的最右侧进行最短匹配,并删除匹配的字符串 echo ${arrayZ[@]%h*e} # one two t four five five # 从每个元素的最右侧进行最长匹配,并删除匹配的字符串 echo ${arrayZ[@]%%t*e} # one two four five five
-
子字符串替换
arrayZ=(one two three four fivefive fivefive) # 对每个元素进行字符串匹配,并替换第一次匹配的字符串 echo ${arrayZ[@]/fiv/XYZ} # one two three four XYZefive XYZefive # 对每个元素进行字符串匹配,并替换所有匹配的字符串 echo ${arrayZ[@]//fiv/XYZ} # one two three four XYZeXYZe XYZeXYZe # 对每个元素进行字符串匹配,并删除所有匹配的字符串 echo ${arrayZ[@]//fi/} # one two three four veve veve # 从每个元素的最左侧进行最长匹配,并替换匹配的字符串 echo ${arrayZ[@]/#f*v/XYZ} # one two three four XYZe XYZe # 从每个元素的最右侧进行最长匹配,并替换匹配的字符串 echo ${arrayZ[@]/%i*e/XYZ} # one two three four fXYZ fXYZ # 其他用法:函数的标准输出作为要替换的字符串 replacement() {echo -n '!!!'} echo ${arrayZ[@]/%e/$(replacement)} # on!!! two thre!!! four fivefiv!!! fivefiv!!!