关于Bash中数组的使用

来源:互联网 发布:知楚王琦 编辑:程序博客网 时间:2024/06/11 01:33
 关于Bash中的数组,很多文章都已经介绍过。这里我也简单的写一下:
一、基础

 Bash只是提供了一维数组,但没有上限的限制。


1)声明

# declare -a name
这样就声明了一个name数组。

2)赋值
 给数组的赋值可以参考普通变量的定义,如:
# name[0]=BeiJing
# name[1]=GuangZhou
# name[2]=ShenZhen

 另外,还可以对整个数组赋值:
# name=([0]=BeiJing [1]=GuangZhou [2]=ShenZhen)

# name=(BeiJing GuangZhou ShenZhen)

  数组元素之间以环境变量IFS的第一个字符来分割。即空格。
 若要跨过分隔符,可以这样做:
# name=("This is BeiJing" GuangZhou ShenZhen)

3)引用
 引用数组,需要使用如下的架构,不要缺少了{}号:
引用
${name[subscript]}

 例如:
# echo ${name[0]}
BeiJing

 另外,还有两个特殊的符号,分别是*和@号,代指所有数组元素:
# echo ${name[ * ]}  //*两边没有空格,这里如此表示是因为exblog会识别错误
BeiJing GuangZhou ShenZhen
# echo ${name[@]}
BeiJing GuangZhou ShenZhen

 显示整个数组元素数量,则用:
# echo ${#name[@]}
3

4)注销
 就当普通的变量,使用unset即可:
# unset name

# unset name[0]


2、升级
 明白了数组的定义和使用,就可以在bash里面方便的使用了。
 假设,有如下的目录:
# ls -l
total 0
-rw-r--r--  1 root  wheel  0 Dec 28 11:39 001
-rw-r--r--  1 root  wheel  0 Dec 28 11:39 002
-rw-r--r--  1 root  wheel  0 Dec 28 17:49 003
-rw-r--r--  1 root  wheel  0 Dec 28 17:49 004

 我现在要把这个目录下所有文件的文件名放到一个name数组中,方便在脚本里面使用。
# declare -a filename
# filename=(`ls -l|grep 00|awk '{print $9}'|sed -e :a -e '$!N;s/\\n/ /;ta'`)
# set|grep filename
filename=([0]="001" [1]="002" [2]="003" [3]="004")
# echo ${filename[@]}
001 002 003 004

 上述的语句,其实就是使用了grep、awk、sed等把一列的字符转换为用()号包括,并用空格分开的字符串,这样就可以给filename数组赋值了。
 基于同样的原理,如果我们希望把一个文件里面一列的字符串都赋值到一个数组里面的话,可以这样:
# cat test
test-001
test-002
test-003
test-004
# filename=(`cat test|sed -e :a -e '$!N;s/\\n/ /;ta'`) 
# set|grep filename
filename=([0]="test-001" [1]="test-002" [2]="test-003" [3]="test-004")

0 0
原创粉丝点击