xDroid's Blog

20.3 Shell 数组 (从新手到菜鸟的Linux教程)

为什么要单独讲下数组呢? 毕竟作为脚本语言,没有关联数组和咸鱼有什么区别?

还是先从正常数组讲起吧= =

首先我们有正常的数组声明方式

array_name=(element_1 element_2 ...)

这里使用数组元素的时候就一定要加上花括号了 ${array_name[n]}


说好的关联数组呢?别急,先看一下 manual

Associative arrays are created using declare -A name.

然后就可以欢快地使用关联数组了

declare -A stock
stock["apple"]=5
stock["pear"]=2
echo We have ${stock["apple"]} apples and ${stock["pear"]} pears.

比较反人类的事情是 zsh 中数组下标是从 1 开始的。 导致我不得不在 bash 下重新测试所有脚本= =

然后赋值的时候数组下标大小是没有限制的;如果你硬要读的时候搞个负值……看个例子就懂了

array=(1 2 3)
echo \(-4\) ${array[-4]}
echo \(-3\) ${array[-3]}
echo \(-2\) ${array[-2]}
echo \(-1\) ${array[-1]}
echo \(0\) ${array[0]}
echo \(1\) ${array[1]}
echo \(2\) ${array[2]}
echo \(3\) ${array[3]}
echo \(4\) ${array[4]}

# in bash
test.sh: line 2: array: bad array subscript
(-4)
(-3) 1
(-2) 2
(-1) 3
(0) 1
(1) 2
(2) 3
(3)
(4)

# in zsh
(-4)
(-3) 1
(-2) 2
(-1) 3
(0)
(1) 1
(2) 2
(3) 3
(4)

祝各位好运