在不删除任何元素的情况下,在给定索引处添加一个值

4

我真的不知道如何使用bash,我遇到了一个问题。我通常使用Python,因此不知道如何在没有列表的情况下进行操作。如何向数组中添加值而不删除默认值。

myArray=(5 6 13 14)

例如,我想在索引2处添加9并获得以下结果:
myArray=(5 6 9 13 14)

而不是这个:

myArray=(5 6 9 14)

显然,执行myArray[2]=9不起作用。我可以将其添加并将左侧的所有内容移动到1,但我正在尝试进行优化,因此如果有一种无需循环的解决方案,我想知道它 :)
1个回答

5
使用切片来获取数组的前后部分,然后构建一个新的数组。
n=2
myArray=( "${myArray[@]:0:n}" 9 "${myArray[@]:n}")

从渐进的角度来看,使用这种方式并不比写循环更有效率,但至少shell会在内部为您处理循环。


你抢先了。但是很高兴知道,这并不比编写循环更有效率。 - Alvaro Flaño Larrondo
@chepner,你可以更准确一些吗?the和n是什么?因为我已经尝试了,但它没有起作用。 - oktomus
1
在他的代码的第一行中,n是变量:在索引数组中,[index]的内容会在算术上下文中进行评估,在Bash算术表达式中,您可以引用shell变量而无需使用$ - glenn jackman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接