代码之家  ›  专栏  ›  技术社区  ›  Chris

将所有数组的索引增加一个数字

  •  0
  • Chris  · 技术社区  · 3 年前

    有一个数组:

    bash-5.2$ arr=(a b c d e f)
    bash-5.2$ paste <(printf "%s\n" "${!arr[@]}") <(printf "%s\n" "${arr[@]}")
    0   a
    1   b
    2   c
    3   d
    4   e
    5   f
    

    我需要将指数增加2才能获得输出:

    2   a
    3   b
    4   c
    5   d
    6   e
    7   f
    

    有没有办法将所有指数轻松地增加两个?

    1 回复  |  直到 3 年前
        1
  •  2
  •   markp-fuso    3 年前

    假设目标是重新编号数组索引,一个(蛮力)想法是:

    $ arr=(a b c d e f)
    $ arr2=(x x "${arr[@]}")
    $ arr=("${arr2[@]}")
    $ unset arr[0] arr[1]
    
    $ paste <(printf "%s\n" "${!arr[@]}") <(printf "%s\n" "${arr[@]}")
    2       a
    3       b
    4       c
    5       d
    6       e
    7       f
    
    $ typeset -p arr
    declare -a arr=([2]="a" [3]="b" [4]="c" [5]="d" [6]="e" [7]="f")
    

    再说一遍,如果OP有用于填充数组的原始语句,那么只需修改所述语句,例如:

    $ arr=(x x a b c d e f)
    $ unset arr[0] arr[1]
    
    $ paste <(printf "%s\n" "${!arr[@]}") <(printf "%s\n" "${arr[@]}")
    2       a
    3       b
    4       c
    5       d
    6       e
    7       f
    
    $ typeset -p arr
    declare -a arr=([2]="a" [3]="b" [4]="c" [5]="d" [6]="e" [7]="f")
    
    推荐文章