zoukankan      html  css  js  c++  java
  • SHELL-数组

    数组

    数组声明

    • 数组元素通过空格符分割
    • 数组下标(索引)从0开始
    # 方式1
    arr=(
    value1
    value2
    value3
    )
    
    # 方式2
    arr=(value1 value2 value3)
    
    # 方式3
    arr[0]=value1
    arr[1]=value2
    arr[2]=value3
    
    # 方式4
    arr=([0]=value1 [1]=value2 [2]=value3)
    
    # 方式5
    str="value1 value2 value3"
    arr=($str)
    

    数组长度

    ${#数组名[*]}${#数组名[@]}

    names=(one two three)
    echo ${#names[*]}
    echo ${#names[@]}
    

    访问数组元素

    数组通过下标访问元素

    格式:${数组名[下标]},下标从0开始至${#names[@]}-1

    names=(one two three)
    echo names[0]
    

    数组元素长度

    names=(one two three)
    
    # 方法1: ${#数组名[index]}
    echo ${#names[0]}
    
    # 方法2:expr length ${数组名[index]}
    expr length ${names[0]}
    
    # 方法3:wc -L
    echo ${names[0]} |wc -L
    
    # 方法4: 
    echo -n ${names[0]}|wc -c
    
    # 方法5:
    expr ${names[0]} : ".*"
    
    # 方法6:
    echo ${names[0]} |awk -F "" '{print NF}'
    
    # 方法7:
    echo ${names[0]} |awk '{print length($0)}'
    

    数组遍历

    names=(one two three)
    
    # 按索引遍历
    for ((i=0; i<${#names[@]}; i++)); do
    	echo ${names[$i]}
    done
    
    # 按元素遍历
    for i in ${names[@]}; do
    	echo ${i}
    done
    

    切片

    数组切片

    格式:${array[@]:起始位置:长度},中间以":"隔开

    names=(one two three four)
    
    # 默认取第1个元素
    echo ${names}
    echo ${names[0]}
    
    # 取全部元素
    echo ${names[@]}
    
    # 取索引为1至后面的所有元素
    echo ${names[@]:1}
    
    # 从索引为0开始,共取2个元素
    echo ${names[@]:0:2}
    echo ${names[@]::2}
    
    # 从倒数第2个开始,共取N个元素
    echo ${names[@]:(-2):1}  # two
    echo ${names[@]:(-2):2}  # two three
    

    数组元素切片

    格式:${数组名[index]:起始位置:长度},中间以":"隔开

    names=(one two three four)
    
    echo ${names[2]:0}
    
    echo ${names[2]:1:3} # hre
    

    数组替换

    • ${array[@]/x/y} : 最小匹配替换,每个元素只替换一次
    • ${array[@]//x/y} : 最大匹配替换,每个元素可替换多次
    • ${array[@]/x/} : 最小匹配删除,只删除一个符合规定的元素
    • ${array[@]//x/} : 最大匹配删除,可删除多个符合规定的元素
    • ${array[@]/#x/y} : 从左往右匹配替换,只替换每个元素最左边的字符
    • ${array[@]/%x/y} : 从右往左匹配替换,只替换每个元素最右边的字符
    names=(one two three four)
    echo ${names[@]/e/E}  # onE two thrEe four
    echo ${names[@]//e/E} # onE two thrEE four
    
    echo ${names[@]/e/}   # on two thre four
    echo ${names[@]//e/}  # on two thr four
    
    echo ${names[@]/#o/O}  # One two three four
    echo ${names[@]/%o/O}  # one twO three four
    

    数组删除

    • # : 每个元素,从左向右进行最短匹配
    • ## : 每个元素,从左向右进行最长匹配
    • % : 每个元素,从右向左进行最短匹配
    • %% : 每个元素,从右向左进行最长匹配
    list=(book food)
    echo ${list[@]#b*o}   # ok food
    echo ${list[@]##b*o}  # k food
    
    echo ${list[@]%o*d}   # book fo
    echo ${list[@]%%o*d}  # book f
    
  • 相关阅读:
    使用IDEA运行Spark程序
    scala for spark
    Spark源码编译
    5分钟弄懂Docker!
    开源HTML5 APP开发神器CanTK发布
    scala学习笔记5 (隐式转化/参数/类)
    scala学习笔记4(apply方法)
    scala学习笔记3(trait)
    做嵌入式开发时将标准输出输入到一个文件的一种方法
    使用O_APPEND标志打开文件对文件进行lseek后进行读写的问题
  • 原文地址:https://www.cnblogs.com/binliubiao/p/13471954.html
Copyright © 2011-2022 走看看