我正在尝试从BASH数组中删除前导零...我有一个类似的数组:
echo "${DATES[@]}"
返回
01 02 02 03 04 07 08 09 10 11 13 14 15 16 17 18 20 21 22 23
我想从日期中删除前导零并存储回数组或其他数组,所以我可以迭代另一步...任何建议?
我试过了,
for i in "${!DATES[@]}"
do
DATESLZ["$i"]=(echo "{DATES["$i"]}"| sed 's/0*//' )
done
但失败了(抱歉,我是一位负责编写BASH脚本的老Java程序员)
答案 0 :(得分:12)
使用参数扩展:
DATES=( ${DATES[@]#0} )
答案 1 :(得分:4)
使用bash算法,您可以通过指定数字是base-10来避免八进制困境:
day=08
((day++)) # bash: ((: 08: value too great for base (error token is "08")
((day = 10#$day + 1))
echo $day # 9
printf "%02d\n" $day # 09
答案 2 :(得分:1)
您可以使用bash参数扩展(请参阅http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html),如下所示:
echo ${DATESLZ[@]#0}
答案 3 :(得分:0)
如果:${onedate%%[!0]*}
将选择字符串$onedate
前面的所有0。
我们可以通过这样做来删除那些零(它是可移植的):
echo "${onedate#"${onedate%%[!0]*}"}"
对于你的情况(只有bash):
#!/bin/bash
dates=( 01 02 02 08 10 18 20 21 0008 00101 )
for onedate in "${dates[@]}"; do
echo -ne "${onedate}\t"
echo "${onedate#"${onedate%%[!0]*}"}"
done
将打印:
$ script.sh
01 1
02 2
02 2
08 8
10 10
18 18
20 20
21 21
0008 8
00101 101