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"; }