4

我在 bash 中有一个数组,它被声明为

string='var1/var2/var3';
IFS='/' read -r -a array <<< $string

所以数组是["var1", "var2", "var3"]

我想在指定索引处添加一个元素,然后移动已经存在的其余元素。

所以结果数组变为

["var1", "newVar", "var2", "var3"]

我一直在尝试使用 and 循环来做到这一点,但我觉得有一些更好的“bash”方式来做到这一点。该数组可能不是固定长度的,因此它需要是动态的。

4

2 回答 2

6

你可以试试这个:

declare -a arr=("var1" "var2" "var3")
i=1
arr=("${arr[@]:0:$i}" 'new' "${arr[@]:$i}")
echo "${arr[@]}"

结果将是:

var1 new var2 var3

更多细节:如何在 Bash 中对数组进行切片

于 2020-12-17T12:47:23.843 回答
2

有一个更短的替代方案。+=运算符允许覆盖从任意索引开始的后续数组元素,因此在这种情况下您不必更新整个数组。看:

$ foo=({1..3})
$ declare -p foo
declare -a foo=([0]="1" [1]="2" [2]="3")
$
$ i=1
$ foo+=([i]=bar "${foo[@]:i}")
$ declare -p foo
declare -a foo=([0]="1" [1]="bar" [2]="2" [3]="3")
于 2020-12-17T12:55:17.983 回答