曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6806|回复: 0
打印 上一主题 下一主题

数组(普通数组与关联数组)

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-3-20 12:58:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bash shell 支持两种数组,一种是普通数组,即以数字作为下标索引;另一种是关联性数组,下标索引可以是字符串(需 bash 4.0 及以上)。

声明一个数组
myarray=(1 3 5 7 9 11)


myarray2[0]="welcome"
myarray2[1]="to"
myarray2[2]="www."
myarray2[3]="groad."
myarray2[4]="net"
打印数组内容:
[Bash shell] 纯文本查看 复制代码
#!/bin/sh


myarray=(1 3 5 7 9 11)


for i in {0..5}
do
        echo -n ${myarray[$i]}
        echo -n " "
done


echo ""


myarray2[0]="welcome"
myarray2[1]="to"
myarray2[2]="www."
myarray2[3]="groad."
myarray2[4]="net"


echo -n ${myarray2[0]}
echo -n " "
echo -n ${myarray2[1]}
echo -n " "


for i in {2..4}
do
        echo -n ${myarray2[$i]}
done


echo ""

运行输出:
$ sh array.sh
1 3 5 7 9 11
welcome to www.groad.net

上面用 for 循环遍历了数组并打印出各个元素,但是有一种更加简洁的方法,及使用 * 符号通配符:
echo ${myarray
  • }
  • 也可以用 @ 符号来替代 * 符号:
    echo ${myarray[@]}

    统计数组的长度也很方便,方法如下:
    echo ${#myarray
  • }

  • 上面定义了普通数组,下面声明关联数组(associative arrays),关联数组在 bash shell 4.0 及以上版本获得支持。

    声明一个关联数组首先需要用 declare 命令的 -A 选项来声明该数组的名字,如 declare -A myarr ,如:
    [Bash shell] 纯文本查看 复制代码
    #!/bin/sh
    
    
    declare -A myarr
    
    
    myarr=([flower]=rose [fruit]=appale)
    
    
    echo ${myarr[flower]}
    
    
    echo ${myarr[fruit]}

    运行输出:
    $ sh myarr.sh
    rose
    appale

    列出关联数组中的所有元素:
    echo ${myarr
  • }

  • 列出关联数组中的所有索引:
    echo ${!myarr
  • }
  • 也可以使用 @ 符号替代 * 符号,效果一样:
    echo ${!myarr[@]}
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

    GMT+8, 2024-4-29 06:11 , Processed in 0.060982 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表