美文网首页
《快乐的linux命令行》-笔记3 数组

《快乐的linux命令行》-笔记3 数组

作者: raincoffee | 来源:发表于2018-08-06 09:53 被阅读13次

    Shell - 数组

    数组赋值

    单赋值
    name[subscript]=value
    多赋值
    name=(value1 value2 ...)
    

    数组操作

    看demo,重点在于*,@ 以及"" 之间的差别。

    我们可能期望的操作是 for i in "${animals[@]}"; do echo $i; done

    [me@linuxbox ~]$ animals=("a dog" "a cat" "a fish")
    [me@linuxbox ~]$ for i in ${animals[*]}; do echo $i; done
    a
    dog
    a
    cat
    a
    fish
    [me@linuxbox ~]$ for i in ${animals[@]}; do echo $i; done
    a
    dog
    a
    cat
    a
    fish
    [me@linuxbox ~]$ for i in "${animals[*]}"; do echo $i; done
    a dog a cat a fish
    [me@linuxbox ~]$ for i in "${animals[@]}"; do echo $i; done
    a dog
    a cat
    a fish
    

    确定数组元素个数

    [me@linuxbox ~]$ a[100]=foo
    [me@linuxbox ~]$ echo ${#a[@]} # number of array elements
    1
    [me@linuxbox ~]$ echo ${#a[100]} # length of element 100
    3
    

    找到数组使用的下标

    因为 bash 允许赋值的数组下标包含 “间隔”,有时候确定哪个元素真正存在是很有用的。为做到这一点, 可以使用以下形式的参数展开:

    ${!array[*]}

    ${!array[@]}

    [me@linuxbox ~]$ foo=([2]=a [4]=b [6]=c)
    [me@linuxbox ~]$ for i in "${foo[@]}"; do echo $i; done
    a
    b
    c
    [me@linuxbox ~]$ for i in "${!foo[@]}"; do echo $i; done
    2
    4
    6
    

    在数组末尾添加元素

    如果我们需要在数组末尾附加数据,那么知道数组中元素的个数是没用的,因为通过 * 和 @ 表示法返回的数值不能 告诉我们使用的最大数组索引。幸运地是,shell 为我们提供了一种解决方案。通过使用 += 赋值运算符, 我们能够自动地把值附加到数组末尾。这里,我们把三个值赋给数组 foo,然后附加另外三个。

    [me@linuxbox~]$ foo=(a b c)
    [me@linuxbox~]$ echo ${foo[@]}
    a b c
    [me@linuxbox~]$ foo+=(d e f)
    [me@linuxbox~]$ echo ${foo[@]}
    a b c d e f
    

    数组排序

    #!/bin/bash
    # array-sort : Sort an array
    a=(f e d c b a)
    echo "Original array: ${a[@]}"
    a_sorted=($(for i in "${a[@]}"; do echo $i; done | sort))
    echo "Sorted array: ${a_sorted[@]}" 
    

    厉害了,先print一遍 通过管道 sort 整个赋值

    删除数组

    删除一个数组,使用 unset 命令:

    [me@linuxbox ~]$ foo=(a b c d e f)
    [me@linuxbox ~]$ echo ${foo[@]}
    a b c d e f
    [me@linuxbox ~]$ unset foo
    [me@linuxbox ~]$ echo ${foo[@]}
    [me@linuxbox ~]$
    

    任何没有下标的对数组变量的引用都指向数组元素0:

    [me@linuxbox~]$ foo=(a b c d e f)
    [me@linuxbox~]$ echo ${foo[@]}
    a b c d e f
    [me@linuxbox~]$ foo=A
    [me@linuxbox~]$ echo ${foo[@]}
    A b c d e f
    

    相关文章

      网友评论

          本文标题:《快乐的linux命令行》-笔记3 数组

          本文链接:https://www.haomeiwen.com/subject/qyrwvftx.html