曲径通幽论坛

标题: 数组(普通数组与关联数组) [打印本页]

作者: beyes    时间: 2012-3-20 12:58
标题: 数组(普通数组与关联数组)
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[@]}





    欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2