do
の目的は何ですか Bashのキーワードfor
ループ構文?私には、それは冗長だと感じます。
for i in `seq 1 2`; do echo "hi"; done
なぜこのような構文ではないのですか?
for i in `seq 1 2`; echo "hi"; done
きっと 目的を果たします。学びたいだけです。
承認された回答:
構文はBourneシェルから継承されていることに注意してください。
変数名の後に、in
のいずれかを含めることができます 要素のリストを明示的に指定するか、do
、位置パラメータをループします。
for i in 1 2 3
do
echo "$i"
done
または
set 1 2 3
for i do
echo "$i"
done
do
を持つ どちらの場合も(最初の場合は厳密に必要ではない場合でも)、構文の一貫性が高まります。 while
とも一致します /until
do
がループする場所 必要です。
while
cmd1
cmd2
do
cmd3
cmd4
done
do
が必要です 状態のリストがどこにあるかを示す コマンドは終了します。
Bourneシェルはfor i; do
。その構文も、2016年版の標準(for i do
)までPOSIXではありませんでした。 常にPOSIXでした。関連するオースティングループのバグを参照してください。
zsh
次のようないくつかの省略形があります:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
または、複数の変数のサポート:
for i j (1 a 2 b) echo $i $j
(ただし、in
は使用できません またはdo
j
の代わりに変数名として 上記)。
文書化されることはめったにありませんが、ほとんどのBourneのようなシェル(Bourne、ksh、bash、zsh、ash
ではありません) また、yash
)サポート:
for i in 1 2 3; { echo "$i";}
Bourneシェル、ksh
およびzsh
(ただし、bash
ではありません )サポート:
for i { echo "$i"; }
bash
、ksh
およびzsh
(Bourneシェルではありません)サポート:
for i; { echo "$i"; }
すべて(Bourne、bash
、ksh
、zsh
)サポート:
for i
{ echo "$i";}
ksh93
、bash
、zsh
サポート:
for ((i=1;i<=3;i++)) { echo "$i"; }