繰り返しごとに変数numを1ずつ増加させるループの基本的な数があります...
for (( num=1; num<=5; num++ ))
do
echo $num
done
どの出力:
1
2
3
4
5
出力を生成しようとしています($ numの前に先行ゼロを追加):
01
02
03
04
05
しないで:
echo 0$num
次の構文を使用します。
$ for i in {01..05}; do echo "$i"; done
01
02
03
04
05
printf
を使用する場合、結果を変数に入れてさらに使用することを妨げるものはありません。
$ foo=$(printf "%02d" 5)
$ echo "${foo}"
05
免責事項:これは>=bash-4
でのみ機能します。
seq -w
は幅を検出し、それを正規化します。
for num in $(seq -w 01 05); do
...
done
どうやらこれはiOSの最新バージョンでは機能しないため、macportsをインストールしてそのバージョンのseq
を使用するか、形式を明示的に設定できます。
seq -f '%02g' 1 3
01
02
03
しかし、このような単純な問題に対するフォーマット仕様のさを考えると、Bashを使用するだけのHenkとAdrianが提供したソリューションが好きです。 Appleは、Bashの一般的な「unix」バージョンがないため、これを台無しにすることはできません。
echo {01..05}
または:
for number in {01..05}; do ...; done
printf
コマンドを使用して、0
パディングを使用します。
printf "%02d\n" $num
Forループは次のようになります。
for (( num=1; num<=5; num++ )); do printf "%02d\n" $num; done
01
02
03
04
05
画面に出力することに興味はありません(printfの主な用途ですよね?)変数$ numは、別のプログラムのパラメーターとして使用されますが、これで何ができるか見てみましょう。
引き続きprintf
を使用できます。
for num in {1..5}
do
value=$(printf "%02d" $num)
... Use $value for your purposes
done
Bash 4.0以降では、固定長文字列でBrace Expansionを使用できます。元の発表については、以下を参照してください。
必要なことだけを行い、シェルの外部には何も必要ありません。
$ echo {01..05}
01 02 03 04 05
for num in {01..05}
do
echo $num
done
01
02
03
04
05
これは、bash-3.2のリリース以降にbash-4.0に追加された新機能の簡潔な説明です。
。 。 。
z。ブレース展開により、展開された数値のゼロパディングが可能になり、適切な数のゼロが追加されて、すべての値に同じ桁数が含まれるようになります。
なぜprintf '%02d' $num
ではありませんか?この内部bashコマンドについては、help printf
を参照してください。
注:異なるバージョンのbashで異なる動作を経験しました。
前者(3.1)では、for nn in (00..99) ; do ...
は機能しますが、for nn in (000..999) ; do ...
は機能しません。両方ともバージョン4.1で機能します。 printfの動作をテストしていません(bash --version
がバージョン情報を提供しました)
乾杯、1月