Bash

向使用者的輸入添加前導零,但正在使用 printf 進行轉換

  • June 12, 2019

我目前正在尋找以下程式碼的替代方案,它的工作方式不那麼“古怪”。

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

如果我輸入072作為輸入,這就是我看到的

Please enter the ticket number: 072
0058

我想知道是否有另一種方法可以讓我對輸入或read命令更加寬容?printf在不實際測試字元串長度的情況下添加前導零似乎是一種很酷的方法。

輸入值的前導零導致 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

請注意,在 bash 中,您可以使用例如將 a 的結果printf直接分配給變數-v``printf -v vTICKET %04d "$((10#$vTICKET))"

另請參閱如何阻止 Bash 解釋八進制程式碼而不是整數?

引用自:https://unix.stackexchange.com/questions/524321