向用户输入添加前导零,但正在使用 printf 进行转换

Mic*_*ael 3 bash input shell-script numeric-data printf

我目前正在寻找以下代码的替代方案,该代码的工作方式不那么“不稳定”。

printf "Please enter the ticket number:\t"; read vTICKET; vTICKET=$(printf %04d "$vTICKET"); printf "$vTICKET\n";
Run Code Online (Sandbox Code Playgroud)

如果我输入072作为输入,这就是我看到的

Please enter the ticket number: 072
0058
Run Code Online (Sandbox Code Playgroud)

我想知道是否有另一种方法可以让我对输入或read命令更加宽容?printf似乎是在不实际测试字符串长度的情况下添加前导零的酷方法。

ste*_*ver 5

输入值的前导零导致 shell 将其解释为八进制数。

您可以使用10#例如强制十进制转换

$ printf "Please enter the ticket number:\t"; read vTICKET; vTICKET=$(printf %04d "$((10#$vTICKET))" ); printf "$vTICKET\n";
Please enter the ticket number: 072
0072
Run Code Online (Sandbox Code Playgroud)

请注意,在 bash 中,您可以printf直接使用-v例如将 a的结果分配给变量printf -v vTICKET %04d "$((10#$vTICKET))"

另请参阅如何阻止 Bash 解释八进制代码而不是整数?