ユーザー入力に先行ゼロを追加しますが、変換にprintfを使用します

ユーザー入力に先行ゼロを追加しますが、変換にprintfを使用します

私は現在、少し「不思議に」動作する次のコードの代替案を探しています。

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

入力として入力すると、072これが表示されます。

Please enter the ticket number: 072
0058

入力やコマンドにもっと寛大な方法があるかどうか疑問に思いますreadprintf実際には、文字列の長さをテストせずに前にゼロを追加する素晴らしい方法のようです。

ベストアンサー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変数に直接割り当てることができます。-vprintf -v vTICKET %04d "$((10#$vTICKET))"

また、見ることができますBashが整数の代わりに8進コードを解釈するのを防ぐ方法は?

おすすめ記事