- 论坛徽章:
- 0
|
为感谢ChinaUnix上兄弟的无私帮助,我贡献一段关于shell数组的翻译,不足之处望大家海涵,海纳百川,有容乃大,希望大家尽己所能,发挥自由之精神。
bash提供一维数组。使用一个数组前可以显式地以declare声明(言下之意,也可以不)。在数组元素的最大数目上并无约束,甚至,不要求数组元素被连续赋值。其下标从0开始。
一个数组可以通过如下赋值方式而自动创建:
name[subscript]=value
下标subscript必须为数,大于或等于0,显式声明如下:
declare -a name
为自己方便,也可写成
declare -a name[subscript],shell解释时忽略subscript.
用如下方式可对整个数组赋值
name=(value1 ... valuen)
其中value可用[subscript]=代替,从而具体指定对那个元素赋值。例子如下:
[shark@phi ver1.2]$ name=([0]=1 [2]=34 [3]=45)
[shark@phi ver1.2]$ echo ${name[0]}
1
[shark@phi ver1.2]$ echo ${name[1]}
[shark@phi ver1.2]$ echo ${name[2]}
34
[shark@phi ver1.2]$ echo ${name[3]}
45
[shark@phi ver1.2]$ echo ${name[4]}
[shark@phi ver1.2]$
(不过这样太不方便,个人意见,还不如按下标一个个写)
引用数组变量用
${name[subscript]}
必须用{},否则shell将有误解,而不予接受。
若下标为`@' or `*', 则做通配符解,代指所有数组元素。
[shark@phi ver1.2]$ echo ${name}
1 34 45
[shark@phi ver1.2]$
[shark@phi ver1.2]$ echo ${name[@]}
1 34 45
但不可做赋值
name=1 是错的。
数组元素可以是字符串。元素间以环境变量IFS的第一个字符分隔。
[shark@phi ver1.2]$ name=(hello glad to meet you)
[shark@phi ver1.2]$ echo ${name[0]}
hello
[shark@phi ver1.2]$ echo ${name[1]}
glad
[shark@phi ver1.2]$ echo ${name[2]}
to
[shark@phi ver1.2]$ echo ${name[3]}
meet
[shark@phi ver1.2]$ echo ${name[4]}
you
若要跨过分隔约束,用双引号括起
[shark@phi ver1.2]$ name=("hello glad" to meet you)
[shark@phi ver1.2]$ echo ${name[0]}
hello glad
[shark@phi ver1.2]$ echo ${name[1]}
to
[shark@phi ver1.2]$ echo ${name[2]}
meet
[shark@phi ver1.2]$ echo ${name[3]}
you
数组元素个数以${#name[subscript]} 计得
无下标的数组变量引用等价于引用其第零个元素。
用unset命令可以销毁一个数组
unset name 或者 unset name
也可以只销毁一个元素
unset name[subscript]
read命令支持以 -a 参数从标准输入读入数组。 |
|