免费注册 查看新帖 |

Chinaunix

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

一维数组(译) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-14 22:51 |只看该作者 |倒序浏览
为感谢ChinaUnix上兄弟的无私帮助,我贡献一段关于shell数组的翻译,不足之处望大家海涵,海纳百川,有容乃大,希望大家尽己所能,发挥自由之精神。

bash提供一维数组。使用一个数组前可以显式地以declare声明(言下之意,也可以不)。在数组元素的最大数目上并无约束,甚至,不要求数组元素被连续赋值。其下标从0开始。

一个数组可以通过如下赋值方式而自动创建:
name[subscript]=value
下标subscript必须为数,大于或等于0,显式声明如下:
declare -a name
为自己方便,也可写成
declare -a name[subscript],shell解释时忽略subscript.

用如下方式可对整个数组赋值
name=(value1 ... valuen)

其中value可用[subscript]=代替,从而具体指定对那个元素赋值。例子如下:

[shark@phi ver1.2]$ name=([0]=1 [2]=34 [3]=45)
[shark@phi ver1.2]$ echo ${name[0]}
1
[shark@phi ver1.2]$ echo ${name[1]}

[shark@phi ver1.2]$ echo ${name[2]}
34
[shark@phi ver1.2]$ echo ${name[3]}
45
[shark@phi ver1.2]$ echo ${name[4]}

[shark@phi ver1.2]$
(不过这样太不方便,个人意见,还不如按下标一个个写)
引用数组变量用
${name[subscript]}
必须用{},否则shell将有误解,而不予接受。

若下标为`@' or `*', 则做通配符解,代指所有数组元素。
[shark@phi ver1.2]$ echo ${name
  • }
    1 34 45
    [shark@phi ver1.2]$
    [shark@phi ver1.2]$ echo ${name[@]}
    1 34 45

    但不可做赋值
    name
  • =1    是错的。

    数组元素可以是字符串。元素间以环境变量IFS的第一个字符分隔。

    [shark@phi ver1.2]$ name=(hello glad to meet you)
    [shark@phi ver1.2]$ echo ${name[0]}
    hello
    [shark@phi ver1.2]$ echo ${name[1]}
    glad
    [shark@phi ver1.2]$ echo ${name[2]}
    to
    [shark@phi ver1.2]$ echo ${name[3]}
    meet
    [shark@phi ver1.2]$ echo ${name[4]}
    you

    若要跨过分隔约束,用双引号括起
    [shark@phi ver1.2]$ name=("hello glad" to meet you)
    [shark@phi ver1.2]$ echo ${name[0]}
    hello glad
    [shark@phi ver1.2]$ echo ${name[1]}
    to
    [shark@phi ver1.2]$ echo ${name[2]}
    meet
    [shark@phi ver1.2]$ echo ${name[3]}
    you

    数组元素个数以${#name[subscript]} 计得
    无下标的数组变量引用等价于引用其第零个元素。
    用unset命令可以销毁一个数组
    unset name    或者   unset name

  • 也可以只销毁一个元素
    unset name[subscript]

    read命令支持以 -a 参数从标准输入读入数组。
  • 论坛徽章:
    1
    荣誉会员
日期:2011-11-23 16:44:17
    2 [报告]
    发表于 2005-04-14 22:58 |只看该作者

    一维数组(译)

    try:
    array=($(<filename))

    论坛徽章:
    0
    3 [报告]
    发表于 2005-04-14 23:12 |只看该作者

    一维数组(译)

    a=` find ~/ -name "*.gz" `
    b=($a)

    论坛徽章:
    1
    荣誉会员
日期:2011-11-23 16:44:17
    4 [报告]
    发表于 2005-04-14 23:37 |只看该作者

    一维数组(译)

    原帖由 "gzgzgz" 发表:
    a=` find ~/ -name "*.gz" `
    b=($a)

    能一句解决的为什么要用两句?

    1. array=($(find /path -name "*.gz"))
    复制代码

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP