假设目标是重新编号数组索引,一个(蛮力)想法是:
$ 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")