在 Bash 中为每个数组元素添加序号
Prepend every array element with a sequential number in Bash
给定一个 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)
如果有一种方法可以扩展数组索引和元素,它将满足我的需要,但我没有找到类似的东西。
显而易见的解决方案应该很快:
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 =)
给定一个 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)
如果有一种方法可以扩展数组索引和元素,它将满足我的需要,但我没有找到类似的东西。
显而易见的解决方案应该很快:
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 =)