给定这个数组
foo=(123 456 789)
我想创建一个由第一个字符组成的新变量 每个元素。这适用于前一个数组
bar=${foo[*]/%??}
但我更喜欢使用不同长度元素的解决方案。
答案 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")'