Bashスクリプト 1桁または2桁の数字を受け取り、2桁にする方法

Bashスクリプト 1桁または2桁の数字を受け取り、2桁にする方法

特定の入力に対して奇妙な私のスクリプトから、次の簡単な抜粋を抽出しました。

echo -e "Enter the Day of the Month : \c "
    read input_day
    printf -v input_day '%02d' "$input_day"

これにより、ユーザーが単一の数字(2)を入力すると、その数字は02に変換されます。これが私の最初の要求です。これは、02などの2桁の数字を入力しても機能します。それでは02にそのままにします。これは、12などの2桁の数字にも当てはまります。しかし、奇妙なことは、数字08と09を受け入れることができないということです。 08または09を入力したときに表示されるエラーです。

Enter the Day of the Month : 08
2: line 20: printf: 08: invalid number

なぜですか? printfヘルプページを読み取ろうとしましたが、「d」が符号付き10進整数を意味することを示しています。したがって、数字8と9を許可する必要があります。それとも私が何かを見逃しているのでしょうか?私の要件は、ユーザーが1桁の「8」と2桁の「08」で日付を入力できる必要があることです。

ベストアンサー1

bash前に0がある数字は8進数として解釈されます。型が問題ではなく、$input_day変数が問題です。

さまざまな方法を使用して削除できます(例を参照)。awk は C の LTRIM 関数と同じです。)。

追加資料:

ちなみに、例では変数が空であることを確認しません。しかし、これを正しく検証することは別の問題になります。

おすすめ記事