系列目录与参考文献传送门: shell入门学习笔记-序章
数组详解
- shell只支持一维数组
- shell数组下标从0开始
数组定义
admindeMacBook-Pro:myshell admin$ a=(0 "one")
admindeMacBook-Pro:myshell admin$ a[2]=2
admindeMacBook-Pro:myshell admin$ b=([0]=0 [3]=2)
- sh数组是弱类型,不要求所有元素的类型一致
- sh数组长度不固定,可以随时增加元素
- sh数组无需给每个元素赋值,可以若干元素赋值。如
b=([0]=0 [3]=2)
数组的长度是3.
获取数组元素
# 数组定义
admindeMacBook-Pro:myshell admin$ a=(0 "one")
admindeMacBook-Pro:myshell admin$ a[2]=2
admindeMacBook-Pro:myshell admin$ b=([0]=0 [3]=2)
# 直接echo
admindeMacBook-Pro:myshell admin$ echo "${a[1]}"
one
admindeMacBook-Pro:myshell admin$ echo "${a[2]}"
2
admindeMacBook-Pro:myshell admin$ echo "${b[1]}"
# 赋值
admindeMacBook-Pro:myshell admin$ c=${a[1]}
admindeMacBook-Pro:myshell admin$ echo $c
one
# 获取全部
admindeMacBook-Pro:myshell admin$ echo ${a[*]}
0 one 2
admindeMacBook-Pro:myshell admin$ echo ${b[@]}
0 2
# *与@的区别
admindeMacBook-Pro:myshell admin$ for var in "${a[*]}"
> do
> echo "$var"
> done
0 one 2
admindeMacBook-Pro:myshell admin$ for var in "${a[@]}"
> do
> echo "$var"
> done
0
one
2
- 获取数组元素:
${array[index]}
- 获取全部元素:
${a[*]}
,结果返回的是一份数据。 - 获取全部元素:
${a[@]}
,结果返回的是多份数据。
获取数组长度
admindeMacBook-Pro:myshell admin$ c[0]="hell world"
admindeMacBook-Pro:myshell admin$ echo ${c[*]}
hell world
admindeMacBook-Pro:myshell admin$ c[1]="goodbye"
admindeMacBook-Pro:myshell admin$ echo $[c[*]]
-bash: c[*]: bad array subscript
0
admindeMacBook-Pro:myshell admin$ echo $c
hell world
admindeMacBook-Pro:myshell admin$ echo $c[*]
hell world[*]
admindeMacBook-Pro:myshell admin$ echo ${c[*]}
hell world goodbye
admindeMacBook-Pro:myshell admin$ echo ${#c[0]}
10
admindeMacBook-Pro:myshell admin$ echo ${#c}
10
admindeMacBook-Pro:myshell admin$ echo ${#c[*]}
2
- 可以直接定义一个数组元素,从而生成数组。
- 使用数组时,尤其注意大括号,否则会出问题。
- 数组不加下表,则获取的是首个元素。
- 获取数组元素的字符串长度:
${#array[length]}
- 获取数组的元素格式:
${#array[*]}
或者${#array[@]}
数组拼接
admindeMacBook-Pro:myshell admin$ abc=(${a[*]} ${b[@]} ${c[*]} ${c[1]})
admindeMacBook-Pro:myshell admin$ for var in "${abc[@]}"
> do
> echo "$var"
> done
0
one
2
0
2
hell
world
goodbye
goodbye
- 数组拼接的思路:通过
${array[@]}
或者${array[*]}
将数组转成列表,然后进行拼接。 - 注意:拼接会导致包含空格的元素分裂。例如
hello world
删除数组元素与删除数组
admindeMacBook-Pro:myshell admin$ echo ${abc[*]}
0 one 2 0 2 hell world goodbye goodbye
admindeMacBook-Pro:myshell admin$ unset abc[1]
admindeMacBook-Pro:myshell admin$ echo ${abc[@]}
0 2 0 2 hell world goodbye goodbye
admindeMacBook-Pro:myshell admin$ unset abc
admindeMacBook-Pro:myshell admin$ echo ${abc[*]}
admindeMacBook-Pro:myshell admin$
- 删除数组元素:
unset array[index]
,注意不是:unset ${array[index]}
- 删除数组:
unset arrays