免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 157747 | 回复: 35
打印 上一主题 下一主题

shell数组小结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-03 14:44 |只看该作者 |倒序浏览
本帖最后由 haokanwk 于 2010-09-03 14:47 编辑

不知道 是什么时候写的东西,整理文档时被考古发现,给那些闲着蛋疼之人,一笑而过吧。如果本文中的错误给您带来所有的精神损失,请找保险公司理陪!当然你可以告诉我 (倾诉)

数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,当然bash shell也不例外。本文就shell数组来做一个小的总结。
在这里只讨论一维数组的情况,关于多维数组(事实上,你得用一维数组的方法来模拟),不涉及。这里包括数组的复制,计算,删除,替换。

数组的声明:
  1. 1)array[key]=value # array[0]=one,array[1]=two
复制代码
  1. 2)declare -a array # array被当作数组名
复制代码
  1. 3)array=( value1 value2 value3 ... )
复制代码
  1. 4)array=( [1]=one [2]=two [3]=three ... )
复制代码
  1. 5)array="one two three" # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身
复制代码
数组的访问:
  1. 1)${array[key]} # ${array[1]}
复制代码
数组的删除
  1. 1)unset array[1] # 删除数组中第一个元素
复制代码
  1. 2)unset array # 删除整个数组
复制代码
计算数组的长度:
  1. 1)${#array}
复制代码
  1. 2)${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别
复制代码
数组的提取
从尾部开始提取:
array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three

子串删除
  1. [root@localhost dev]# echo ${array[@]:0}
  2. one two three four
复制代码
  1. [root@localhost dev]# echo ${array[@]#t*e} # 左边开始最短的匹配:"t*e",这将匹配到"thre"
  2. one two e four
复制代码
  1. [root@localhost dev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"
复制代码
  1. [root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
复制代码
  1. [root@localhost dev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配
  2. one tw three four
复制代码
  1. [root@localhost dev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配
  2. one tw three four
复制代码
子串替换
  1. [root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
复制代码
第一个匹配到的,会被删除
  1. [root@localhost dev]# echo ${array[@] /o/m}
  2. mne twm three fmur
复制代码
所有匹配到的,都会被删除
  1. [root@localhost dev]# echo ${array[@] //o/m}
  2. mne twm three fmur
复制代码
没有指定替换子串,则删除匹配到的子符
  1. [root@localhost dev]# echo ${array[@] //o/}
  2. ne tw three fur
复制代码
替换字符串前端子串
  1. [root@localhost dev]# echo ${array[@] /#o/k}
  2. kne two three four
复制代码
替换字符串后端子串
  1. [root@localhost dev]# echo ${array[@] /%o/k}
  2. one twk three four
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-09-03 14:47 |只看该作者
有心人

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
3 [报告]
发表于 2010-09-03 14:51 |只看该作者
MARK

论坛徽章:
0
4 [报告]
发表于 2010-09-03 14:57 |只看该作者
学习,lz好人

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
5 [报告]
发表于 2010-09-03 15:00 |只看该作者
mark

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
6 [报告]
发表于 2011-11-07 11:41 |只看该作者
mark

求职 : 项目经理
论坛徽章:
22
狮子座
日期:2014-01-14 08:42:1615-16赛季CBA联赛之八一
日期:2016-12-15 16:11:1315-16赛季CBA联赛之佛山
日期:2016-12-19 08:58:1315-16赛季CBA联赛之佛山
日期:2017-01-12 11:34:1415-16赛季CBA联赛之福建
日期:2017-02-22 14:05:4415-16赛季CBA联赛之福建
日期:2017-06-09 08:59:4015-16赛季CBA联赛之深圳
日期:2017-07-17 11:19:3615-16赛季CBA联赛之新疆
日期:2018-03-09 09:36:5115-16赛季CBA联赛之江苏
日期:2018-07-18 10:44:4615-16赛季CBA联赛之山西
日期:2018-09-19 09:09:2615-16赛季CBA联赛之浙江
日期:2016-11-18 15:14:1615-16赛季CBA联赛之四川
日期:2016-06-27 11:43:31
7 [报告]
发表于 2011-11-07 12:10 |只看该作者
收藏{:3_198:}

论坛徽章:
0
8 [报告]
发表于 2012-04-27 16:16 |只看该作者
不错、总结的很好

论坛徽章:
0
9 [报告]
发表于 2012-05-03 15:36 |只看该作者
mark。。。。。。。。。。。。。。。。。

论坛徽章:
0
10 [报告]
发表于 2012-05-15 15:48 |只看该作者
好东西,做个标记先
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP