变量
Zsh 变量无需加引号。如需要按照空格分割,使用 $=variable
或者 ${=variable}
。
判断变量是否存在:$+variable
,为 1 即存在。判断 associative array 是否有某一个键:$+hash[key]
。特别地,判断一个命令是否存在
(( $+commands[nvim] )) && echo 'nvim exists'
变量展开选项
形如 ${(FLAG)variable}
。参考 14.3.1 Parameter Expansion Flags。也可打出 ${(
然后按 TAB 查看补全信息。
常用选项
F
- 用换行符连接数组元素
j:string:
- 用 string 连接数组元素。如果 string 中包含
:
,可将两个:
换成其它字符,只要两字符相同。 s:string:
- 用 string 分割变量内容
q
- 将特殊符号用反斜线 escape
q-
- 将特殊符号用单引号包裹
Q
- 去掉一层反斜线 escape
k
- 一个关系数组(associative array)的所有键(key)
kv
- 一个关系数组的键和值
例子
${(j: :)${(q-)@}}
- 将 shell 参数数组变为 escape 后的一个参数
数组
Zsh 数组下标从 1 开始。
在数组最前加入一个元素(prepend)
array=($ele $array)
在数组最后加入一个元素(append)
array=($array $ele)
# 或者
array+=($ele)
数组下标选项
形如 $array[(FLAG)sub]
。参考 15.2.3 Subscript Flags。也可打出 $a[(
然后按 TAB 查看补全信息。
I
- 返回
sub
在数组$array
中的最后一次出现的下标,不存在则返回 0 i
- 同上,不过返回的是第一次出现的下标
判断数组 $path
中是否含有 /bin
:
(( $path[(I)/bin] )) && echo '/bin is in $path'