linux中存在数组的变量类型,如:
array=("Hi" "my" "name" "is")
echo ${array[0]}
Hi
什么是数组?
linux中的数组是可以存储多个元素的连续内存空间;
并可以通过key(默认是index)来索引对应内存空间中的值的变量类型。
如何简单创建一个数组?
① declare -a ARRAY_NAME
此为定义一个简单数组,利用index来索引。
② declare -A ARRAY_NAME
此为定义一个关联数组,利用key来索引,属于kv的数组类型。
如何给简单创建的数组赋值呢?
提前注意:linux的数组支持不连续赋值,可以跳过某个index,如array[0],array[2],array[5]
① 逐个赋值:
root@dbt:/home/marvin/shell# declare -a array
root@dbt:/home/marvin/shell# array[0]="hello"
root@dbt:/home/marvin/shell# array[1]="world"
root@dbt:/home/marvin/shell# echo $array
hello
root@dbt:/home/marvin/shell# echo ${array[*]}
hello world
② 一次性赋值:
root@dbt:/home/marvin/shell# array=("hello" "world" "!")
root@dbt:/home/marvin/shell# echo ${array[*]}
hello world !
③ 指定赋值:
root@dbt:/home/marvin/shell# array=([0]="hello" [1]="hello2")
root@dbt:/home/marvin/shell# echo ${array[*]}
hello hello2
④ 使用read赋值:
root@dbt:/home/marvin/shell# read -p "plz input an array: " -a array
plz input an array: 1 2 3 4
root@dbt:/home/marvin/shell# echo ${array[*]}
1 2 3 4
注意:须空格隔开各元素
⑤ 关联数组的使用(用得少):
declare -A array_name
array_name=([key1]="val1" [key2]="val2" ...)
如何索引、使用数组元素呢?
索引:linux中数组的index从0开始索引;如果是kv关联数组,则是array[key]来索引。
使用:在具体调用时,最好使用如下格式;
${array[index]} / ${array[key]}
如果直接调用数组名,则shell默认只会将第一个元素输出,即array[0]
其他使用方式:
① ${array[*]} 和 ${array[@]} 表示调用整个数组
② ${#array[*]} 和 ${#array[@]} 都表示数组所有元素的个数
以上这一点,可以用来向数组末尾追加新元素,如:
array[${#array[*]}]=NEW_VALUE
③ 数组切片:shell中数组的切片不同于python这样的语言,但还算易于理解;
${array[@]:offset:number}
其中,offset 表示跳过的元素个数。
number 表示要取多少个元素,如果没有指明,则取出剩余所有。
如,我们跳过两个元素,取一个元素:
root@dbt:/home/marvin/shell# echo ${array[*]}
1 2 3 4
root@dbt:/home/marvin/shell# echo ${array[*]:2:1}
3
④ 删除元素:
unset array[INDEX]