每个数组元素的第一个字符

时间:2014-05-05 22:10:58

标签: arrays bash

给定这个数组

foo=(123 456 789)

我想创建一个由第一个字符组成的新变量 每个元素。这适用于前一个数组

bar=${foo[*]/%??}

但我更喜欢使用不同长度元素的解决方案。

2 个答案:

答案 0 :(得分:3)

使用for循环:

bar=()
for f in "${foo[@]}" ; do
    bar+=( ${f:0:1} )
done

创建bar=(1 4 7)。如果您只想要一个字符串,请删除括号:

    bar+=${f:0:1}

答案 1 :(得分:2)

您可以使用:

echo "${foo[@]%[0-9][0-9]}"
1 4 7

或将它们存储到数组中:

bar=("${foo[@]%[0-9][0-9]}")

declare -p bar
declare -a bar='([0]="1" [1]="4" [2]="7")'

更新

使用printf 替代可变长度输入元素的方法:

foo=(1344423 4876556 78945)
bar=( $(printf "%1.1s\n" "${foo[@]}") )

declare -p bar
declare -a bar='([0]="1" [1]="4" [2]="7")'
相关问题