原文地址:
参考资料
*
《学习
bash shell
第
3
版》
6.4. Arrays
Bash
中还可以使用数组变量
,
其赋值有两种
:
(1) name = (value1 … valuen)
此时下标从
0
开始,也可以:
names=([2]=alice
[0]=hatter [1]=duchess)
。
(2) name[index] = value
数组可以使用
declare –a
来显示声明,
数组下标的范围没有任何限制
,
同时也不必使用连续的分量。可以通过
${
array
[
i
]}.
访问数组中的元素。如果不指定元素,则表示第一个元素。
@
与
*
相同,但是使用时加引号,并在引号中返回每个参数,
*
则作为一个整体的字符串返回。
# A=(a b c def)
# echo ${A[@]}
a b c def
# echo ${A}
a
echo ${A[*]}
a b c def
for i in “${A[@]}”; do
echo $i
done
显示的结果:
a
b
c
def
for i in “${A[*]}”; do
echo $i
done
显示结果:
a b c def
显示目前有值的数组序号:――
bash 3.0
以后才支持。
# echo ${!A[@]}
0 1 2 3
//
取得数组元素的个数
# echo ${#A[@]}
4
显示第
3
个元素里面的元素的个数:
echo ${#A[3]}
3
echo ${#A[2]}
1
//
清除变量
$ unset A
$ echo ${A[@]}
$
A=B
B=C
unset $A
事实上所取消的变量是
B
而不是
A
//
清空变量
,
即将值变为空
$ A=
$ echo ${A[@]}
$
#!/bin/bash
for i in $(cut -f 1,3 -d: /etc/passwd) ; do
echo $i
array[${i#*:}]=${i%:*}
done
echo “User ID $1 is ${array[$1]}.”
echo “There are currently ${#array[@]} user accounts on the system.”
用
shell
实现的选择排序
# vi test2
#!/bin/bash
values=(39 5 36 12 9 3 2 30 4 18 22 1 28 25)
numvalues=${#values[@]}
for (( i=0; i < numvalues; i++ )); do
lowest=$i
for (( j=i+1; j < numvalues; j++ )); do
if [ ${values[j]} -le ${values[$lowest]} ]; then
lowest=$j
fi
done
temp=${values[i]}
values[i]=${values[lowest]}
values[lowest]=$temp
done
for (( i=0; i < numvalues; i++ )); do
echo -ne “${values[$i]}/t”
done
echo -e “/n/n——-end———/n”
环境变量
DIRSTACK
就是使用数组实现的。其他还有
BASH_VERSINFO
,
PIPESTATUS
字符串转数组
str=”12 34 56″
arr=($str)
count=${#arr[@]}
for (( i=0;i<count;i=i+1))
do
echo “$i=arr[$i]”
done