bash脚本中的printf出现奇怪的问题:“09”和“08”是无效数字,“07”和“06”都不错

这是我的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表达式。

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...