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

}";do

echo$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