私は現在、少し「不思議に」動作する次のコードの代替案を探しています。
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
実際には、文字列の長さをテストせずに前にゼロを追加する素晴らしい方法のようです。
ベストアンサー1
入力値の前に0がある場合、シェルはそれを8進数として解釈します。
10#
たとえば、次のように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が整数の代わりに8進コードを解釈するのを防ぐ方法は?