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
    
  • 相关阅读:
    数论模板
    HZNU_TI1050 训练实录
    2019 ICPC Asia Xuzhou Regional
    ICPC 2019-2020 North-Western Russia Regional Contest
    2019 ICPC Asia Yinchuan Regional
    2019-2020 ICPC, Asia Jakarta Regional Contest
    The 2019 China Collegiate Programming Contest Harbin Site
    2019-2020 ICPC, NERC, Southern and Volga Russian Regional Contest
    Educational Codeforces Round 75
    2018-2019 ACM-ICPC, Asia Dhaka Regional Contest
  • 原文地址:https://www.cnblogs.com/binliubiao/p/13471954.html
Copyright © 2011-2022 走看看