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

前端之家收集整理的这篇文章主要介绍了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表达式。

猜你在找的Bash相关文章