zoukankan      html  css  js  c++  java
  • Shell数组操作

    1、数组定义

    1.1 declare定义

    使用declare -a 命令定义数组(数组的索引是从0开始计数的),接下来就可以通过[]操作符为不同索引位置的元素赋值。

    declare -a names
    names[0]=tom
    names[1]=jack

    注意:shell变量是弱类型的,比要求数组中元素类型相同

    在定义数组的同时,可以同时赋值,用()表示,各元素之间用空格隔开

    #定义的同时直接赋值
    declare -a names=(tom jack)
    #增加元素
    names[2]=sue

    1.2直接定义

    创建数组最简单的方法是使用()直接定义数组,括号中元素用空格隔开;在括号中也可以声明下标。实例:

    #使用()直接数组
    days1=(one two three four five)
    #或者在()中声明下标,默认从0开始
    days2=([0]=’one’ [1]=’two’ [2]=’three’ [3]=’four’)
    #下标可以不连续
    days3=([0]=’one’ [2]=’three’)

    1.3带下标定义

    使用[]操作符,为每一个指定下标赋值,下标也可以不连续

    header[0]=’user’
    header[1]=’pid’
    header[2]=’%CPU’
    header[3]=’%MEM’

    1.4从文件读取数组

    days=(`cat days.txt`)

    2、数组操作

    2.1赋值

    指定下标,使用[]操作符为元素赋值,当下标不存在时,相当于为数组增加元素

    declare -a names
    names[0]=tom

    2.2取值

    指定下标,使用[]操作符从数组中对应元素,然后使用$取值,格式:${数组名[索引]}

    days=(one two three four five)
    #取出第1个元素
    echo ${days[0]}
    #取出第3个元素
    echo ${days[2]}

    获得数组中所有值:${数组名[@]}${数组名[*]}

    ${数组名[@]}得到是以空格隔开的元素,可以用在数组遍历中;${数组名[*]}得到的是一整个字符串。

    注意:${数组名}并不会获得所有值,它只会获得到第一个元素的值。即${数组名}等价于${数组名[0]}

    示例:

    #!/bin/bash
    #数组取值
    
    days=(one two three four)
    echo ${days}
    echo ${days[0]}
    echo ${days[1]}
    echo ${days[@]}
    echo ${days[*]}
    
    echo "**********"
    names=()
    names[1]=tom
    names[2]=jack
    echo ${names}
    echo ${names[1]}
    echo ${names[@]}

    结果:

     

    2.3长度

    利用”@”或“*”字符,将数组扩展成列表,然后使用”#”来获取数组元素的个数。

    示例:

    #!/bin/bash
    #数组个数
    
    days=(one two three four)
    echo "数组days的元素个数为:${#days[@]}"
    
    echo "**********"
    names=()
    names[1]=tom
    names[2]=jack
    echo "数组names的元素个数为:${#names[*]}"

    结果:

    注意:如果某个元素是字符串,可以通过制定索引的方式获得该元素的长度。

    2.4遍历

    存在以下三种方式:

    (1)${数组名[@]}、${数组名[@]}均可以获得所有元素(不管是元素列表,还是一整个字符串),使用for循环遍历即可

    (2)带数组下标的遍历,当需要使用到数组的下标时,可以使用${!数组名[@]}

    (3)while循环:根据元素的个数遍历,但对于稀疏数组,可能会丢失数据

    示例:

    #!/bin/bash
    #数组遍历
    
    days=(one two three four)
    #for循环遍历
    for day in ${days[*]}  #或${days[@]}
    do
            echo $day
    done
    echo "***************"
    #fou循环带下标遍历
    for i in ${!days[@]}
    do
            echo ${days[$i]}
    done
    
    echo "***************"
    #while循环
    names=()   #数组names是一个稀疏数组
    names[1]=tom
    names[2]=jack
    i=0
    while [ $i -lt ${#names[*]} ]
    do
            echo ${names[$i]}
            let i++
    done

    结果:

    2.5删除

    删除一个数组或数组中元素用unset命令。

    unset 数组名[索引]      #删除索引下的元素

    unset 数组名         #删除整个数组

    2.6连接

    用()将多个数组连接在一起,()中各个数组用空格隔开。

    days=(one two three four)
    names=(tom jack)
    days=(${days[@]} ${names[@]})
     
  • 相关阅读:
    更博不能忘——webpack学习笔记
    面试中遇到过的闭包~
    github踩坑之git命令收集与整理(windows)
    应该写个博客
    重学C语言(一):熟悉汇编语言
    关于Swift的闭包(closure)以及其在可选(Optional)类型中的应用
    解决Xcode 7出现cdtool cannot compile的问题(2015年8月12日更新)
    更改LaTeX的数学模式中使用的字体
    在Mac下安装使用支持中文的LaTeX(二)
    在Mac下安装使用支持中文的LaTeX(一)
  • 原文地址:https://www.cnblogs.com/jiadi321/p/10830902.html
Copyright © 2011-2022 走看看