这是我的bash脚本 – 我只是想要一个零的数字:
printf "%04d" "09" printf "%04d" "08" printf "%04d" "07" printf "%04d" "06"
输出:
./rename.sh: line 3: printf: 09: invalid number 0000 ./rename.sh: line 4: printf: 08: invalid number 0000 0007 0006
什么…?
只有09和08造成这个问题:我的序列中的其他数字似乎都可以。
如果你有一个变量中的“09”,你可以这样做
a="09" echo "$a" echo "${a#0}" printf "%04d" "${a#0}"
为什么这有帮助?那么,以0开头的数字字面值,但没有第二位的x被解释为八进制值。
八进制值只有数字0..7,8和9是未知的。
“$ {a#0}”中带有一个前导0.结果值可以输入到printf,然后打印出适当的0,前缀为4位数。
如果您必须期望获得诸如“009”的值,则会更复杂,因为您必须使用一个循环,消除开始时的所有多余的0,或者在注释中提到的extglob表达式。