Linux shell 数组
参考资料
*《学习bashshell第3版》6.4.Arrays
Bash中还可以使用数组变量,其赋值有两种:
(1)name=(value1...valuen)此时下标从0开始,也可以:names=([2]=alice[0]=hatter[1]=duchess)。
(2)name[index]=value
<!--[if!supportLineBreakNewLine]-->
<!--[endif]-->
数组可以使用declare–a来显示声明,数组下标的范围没有任何限制,同时也不必使用连续的分量。可以通过${array[i]}.访问数组中的元素。如果不指定元素,则表示第一个元素。@与*相同,但是使用时加引号,并在引号中返回每个参数,*则作为一个整体的字符串返回。
#A=(abcdef)
#echo${A[@]}
abcdef
#echo${A}
a
echo${A
}abcdef
foriin"${A[@]}";do
echo$i
done
显示的结果:
a
b
c
def
foriin"${A
}";doecho$i
done
显示结果:
abcdef
显示目前有值的数组序号:――bash3.0以后才支持。
#echo${!A[@]}
0123
//取得数组元素的个数
#echo${#A[@]}
4
显示第3个元素里面的元素的个数:
echo${#A[3]}
3
echo${#A[2]}
1
//清除变量
$unsetA
$echo${A[@]}
$
A=B
B=C
unset$A事实上所取消的变量是B而不是A
//清空变量,即将值变为空
$A=
$echo${A[@]}
$
#!/bin/bash
foriin$(cut-f1,3-d:/etc/passwd);do
echo$i
array[${i#*:}]=${i%:*}
done
echo"UserID$1is${array[$1]}."
echo"Therearecurrently${#array[@]}useraccountsonthesystem."
用shell实现的选择排序
#vitest2
#!/bin/bash
values=(3953612932304182212825)
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