我需要从数组中的所有值中删除第一个0
,例如变化
array=( 01 02 03 [...] 10 [...] 20 [...] )
到
array=(1 2 3 [...] 10 [...] 20 [...] )
我想我可以用${parameter/pattern/string}
做到这一点,但我对语法很遗憾。
答案 0 :(得分:4)
鉴于它是一组数字,我会算术而不是尝试执行字符串替换:
$ a=( {01..20} )
$ echo "${a[@]}"
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
$ b=()
$ for i in "${a[@]}"; do b+=( $((10#$i)) ); done
$ echo "${b[@]}"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
此处$((10#$i))
会导致变量i
被评估为基数为10的数字。
答案 1 :(得分:3)
$ array=(01 02 03 10 20)
$ echo "${array[@]#0}"
1 2 3 10 20
答案 2 :(得分:2)
shopt -s extglob
b=("${a[@]##+(0)}")
printf "%s\n" "${b[@]}"
答案 3 :(得分:-1)
您可以使用参数扩展并直接重新定义数组:
[self.savingBeaconSpecs addObject:artwork];
array=(${array[@]#0})
从${string#substring}
前面删除$substring
的最短匹配。
如果要删除多个零,例如$string
到(001 002)
,您可以使用(1 2)
,然后使用shopt -s extglob
。
"${var##*(0)}"
并且有多个零:
$ a=(01 02 03 10 11)
$ ar=(${a[@]#0})
$ for i in "${ar[@]}"; do echo $i; done
1
2
3
10
11