【问题标题】:Prepend every array element with a sequential number in Bash在 Bash 中为每个数组元素添加一个序号
【发布时间】:2020-11-10 22:39:09
【问题描述】:

给定 Bash 中的一个数组,是否有一种简单有效的方法可以按顺序为每个元素添加数字?

注意:添加逗号只是为了使数组更具可读性!

示例,给定:

my_array=(a, b, c, d, e)

想要的结果:

my_array=(1, a, 2, b, 3, c, 4, d, 5, e)

或者从命令结果中获取行,其中每一行都是一个元素,在每个项目之前都有一个数字:

readarray -t my_array < <(my_command)

如果有一种方法可以扩展数组索引以及元素,它可以满足我的需要,但我没有找到类似的东西。

【问题讨论】:

  • 您打算在数组元素中使用逗号吗? but I didn't found anything like this.真的吗?
  • @KamilCuk 不,没有逗号。我只是添加了逗号以使其更明显。

标签: arrays linux bash shell sequence


【解决方案1】:

显而易见的解决方案应该很快:

my_array=(a, b, c, d, e)  tmp=()
for ((i=0;i<${#my_array[@]};++i)); do
   tmp+=("$((i+1))," "${my_array[i]}")
done
my_array=("${tmp[@]}")
declare -p my_array
# would output:
# declare -a my_array=([0]="1," [1]="a," [2]="2," [3]="b," [4]="3," [5]="c," [6]="4," [7]="d," [8]="5," [9]="e")

如果数字后面的 , 不相关,您可以在 readarray 命令中使用 sed 的巧妙技巧:

readarray -t my_array < <(printf "%s\n" "${my_array[@]}" | sed =)

【讨论】:

  • 或者,遍历数组索引:for i in "${!my_array[@]}"
猜你喜欢
  • 2015-06-03
  • 2018-01-04
  • 1970-01-01
  • 2021-03-20
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多