Dec 28

[原]关于Bash中数组的使用 不指定

linuxing , 18:08 , 编程 » Bash , 评论(2) , 引用(0) , 阅读(39926) , Via 本站原创 | |
 关于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")


※2005-12-28 第一次编写
原始编写文档

※参考资料
gzgzgz在ChinaUnix上的文章  
Tags: ,
kaka
2009/08/07 10:31
楼主能详细讲解一下(`cat test|sed -e :a -e '$!N;s/\\n/ /;ta'`) 这句的意思 不胜感激
Jessie Email
2008/12/04 15:39
谢谢楼主贴出来,对于我们刚入门linux的人来说,没有一本专门的书,系统的学习bash,只是工作中用到什么就来查找什么。所以类似楼主的帖子对我们非常重要。
非常感谢,帮助很大。而且帖子说的非常条理清晰。

并且很感谢这个网站,不用注册也可以发表言论。呵呵。有时很想回帖感谢,不过又要注册先。再次谢谢。:)
linuxing 回复于 2008/12/05 09:41
可以再看看这两天(08.12.03)放上来的两个ppt文档,其中对bash的讲解已经比较清楚和全面了。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]