数组与字典
Array
在 shell 中通过括号及空格分隔符来定义数组。
数组可通过下标进行访问,如果需要访问全部数组,则使用 ${ARRAY[@]}
变量。
如无特别说明,以下命令均在 bash
下执行。
zsh 中可直接使用
$var
,在 bash 中使用$var
会报错,因此最好使用${var}
。
bash 中下标以 0 开始,zsh 中下标以 1 开始。
bash
$ list=('a' 'b' 'c' 'd' 'e')
# 打印全部数组
$ echo ${list[@]}
a b c d e
# 打印index为0的变量
# 注意:在 zsh 中为打印所有值
$ echo $lists
a
# 打印index为1的变量
$ echo ${list[1]}
b
# 打印最后一个变量
$ echo ${list[-1]}
e
# 打印数组长度
$ echo ${#list[@]}
5
# 从index为2的变量开始打印,打印三个
$ echo ${list[@]:2:3}
c d e
# 注意:在 zsh 中可通过 [2,3] 作为切片
$ echo ${list[2,3]}
# 增
$ list+=('f' 'g')
$ echo ${list[@]}
a b c d e f g
# 删
$ unset list[3]
$ echo ${list[@]}
a b c e f g
# 注意:在 zsh 中通过赋值空数组进行删除某一项
# 注意:在 zsh 中通过赋值空数组进行删除某一项
$ list[3]=()
# 改
$ list[0]=x
$ echo ${list[@]}
x b c e f g
Associative Array
通过 declare -A
或者 typeset -A
定义字典,或者在 shell 叫 Associative Array
。
在 Javascript 中,可理解为对象,在 Python 中,可理解为字典。
bash
# 定义 object,两种方式都行
# typeset -A object
$ declare -A object
$ object[a]=3
$ object[b]=4
$ object[c]=5
$ echo ${object[a]}
3
# 打印所有的 values
$ echo ${object[@]}
3 4 5
# 打印所有的 keys
$ echo ${!object[@]}
a b c
在 zsh
中,关于 Associative Array
值的读取语法稍微不一样。
bash
# 打印所有的 keys
$ echo ${(k)object[@]}
# 打印所有的 values
$ echo ${(v)object[@]}
# 打印所有的 keys/values
$ echo ${(kv)object[@]}