总结
- 数组
${ARRAY[@]}: 输出数组全部变量${ARRAY[-1]}: 输出最后一个变量${#ARRAY}: 输出数组长度${ARRAY[@]:n:m: 从 index 为 n 的变量开始打印,打印 m 个,zsh 坐标也从 0 开始${ARRAY[n,m]}: zsh 特有,将 n 到 m 作为切片ARRAY+=(): 推入数组ARRAY[n]=(): 删除 index 为 n 的变量ARRAY[n]=x: 修改 index 为 n 的变量
- 对象
declare -A/typeset -A: 定义对象${Object[@]}/${(v)Object[@]}: 输出对象所有 value${!Object[@]}/${(k)Object[@]}: 输出对象所有 key${(kv)Object[@]}: 输出对象所有 key value
提问
[x] 1. 如何定义数组与字典
数组:
array=('a' 'b')括号和空格
对象:declare -A/typeset -A[x] 2. 如何打印数组的全部值
${ARRAY[@]}
1. 前提提要、场景
命令的前置变量,我们可以通过类似 NODE_ENV=production 直接赋值去设置变量。数组 Array 也可以直接赋值。
2. Array 数组
通过 括号 和 空格 来定义数组
sh
$ array=('a' 'b' 'c')
bash 中下标以 0 开始,zsh 中下标以 1 开始。
${ARRAY[@]:n:m}zsh 此时的 n 也是从 0 开始
${ARRAY[@]}: 访问数组全部变量
sh
$ array=('a' 'b' 'c' 'd' 'e')
$ echo ${array}
a b c d e
# 打印数组全部内容
$ echo ${array[@]}
a b c d e
$ echo ${array[1]}
a
# 打印最后一个变量
$ echo ${array[-1]}
e
# 打印数组长度
$ echo ${#array}
5
# 从 index 为 2 的变量开始打印,打印 3 个
# zsh 此时下标又从 0 开始了
$ echo ${array[@]:2:3}
c d e
# 注意:在 zsh 中可通过 [2,3] 作为切片
$ echo ${array[2,3]}
b c
# 推入数组
$ array+=('f' 'g')
$ echo ${array[@]}
a b c d e f g
# 删除数组某一变量
$ unset array[3]
$ echo ${array[@]}
a b d e f g
# zsh 删除通过赋值空数组
$ array[3]=()
a b d e f g
# 修改
$ array[1]=9
$ echo ${array[@]}
9 b d e f g
3. Associative Array 类似 js 的对象
在 javascript 中有对象,shell 可以通过 declare -A 或 typeset -A 定义
sh
# 定义
$ declare -A object
# 修改值
$ object[a]=3
$ object[b]=4
$ object[c]=5
# 打印全部 value
$ echo ${object[@]}
3 4 5
# 打印全部 key
# zsh 无效 下面有 zsh 的
$ echo ${!object[@]}
zsh 使用以下的
sh
# 打印所有的 keys
$ echo ${(k)object[@]}
# 打印所有的 values
$ echo ${(v)object[@]}
# 打印所有的 keys/values
$ echo ${(kv)object[@]}