关于Bash中数组的使用

 关于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")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值