処理中のシェルスクリプトでは、一部の追加プロセスが出力を印刷します。 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
前にゼロを避けると解決策になる可能性がありますが、そうでなければバグになる可能性があります。