デフォルトの数字をプレフィックスとして2桁0に設定するシェルスクリプト

デフォルトの数字をプレフィックスとして2桁0に設定するシェルスクリプト

処理中のシェルスクリプトでは、一部の追加プロセスが出力を印刷します。 1桁の数字の場合は、プレフィックスとして0を追加する必要があります。

これは私の現在のスクリプトです。

c_year=2020
for i in {01..11}
        do  
            n_year=2020
            echo 'Next Year:'$n_year
            if [[ $i == 11 ]]
            then n_month=12
            echo 'Next Month:'$n_month
            else 
            n_month=$(($i + 1))
            echo 'Next Month:'$n_month
            fi
            echo $date" : Processing data '$c_year-$i-01 00:00:00' and '$n_year-$n_month-01 00:00:00'"
        done

iは2桁ですが、n_monthまだ1桁が印刷されます。デフォルトのシェル出力を設定するには、2桁の数字を返す必要がありますか?

それともこの問題を解決する他の方法はありますか?

ベストアンサー1

さまざまな状況で前にゼロがある数値は次のように解釈されるため、小数値を格納する変数には前にゼロを使用しないでください。8進数。算術拡張がその一つです。次のコードは失敗します。

i1=09
i2=$((i1+1))

これが働いている間:

i1=9
i2=$((i1+1))

結果を印刷するときは、前にゼロのみを追加してください。正しい形式を使用してprintfこれを実行してください。例:

i1=9
i2=$((i1+1))
year1=2020
year2=2020

printf "Processing data '%04d-%02d-01 00:00:00' and '%04d-%02d-01 00:00:00'\n" "$year1" "$i1" "$year2" "$i2"


数値が予想される場合は、printf先頭にゼロの文字列を8進数として解釈します。したがって、これは注意する必要がある別の状況です。例:

$ printf '%02d\n' 9
09
$ printf '%02d\n' 09
printf: '09': value not completely converted
00
$ printf '%02d\n' 012
10

つまり、printf %02d前にゼロを避けると解決策になる可能性がありますが、そうでなければバグになる可能性があります。

おすすめ記事