Bash for ループで「do」キーワードの目的は何ですか?

Bash for ループで「do」キーワードの目的は何ですか?

doBashループ構文forのキーワードの目的は何ですか?私にとってこれは重複した感じです。

for i in `seq 1 2`; do echo "hi"; done

なぜ構文がこのようなものではないのですか?

for i in `seq 1 2`; echo "hi"; done

私はそれを確信していますする目的を記入してください。ただ学びたいです。

答え1

この構文は 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/ loopingと一致します。untildo

while
  cmd1
  cmd2
do
  cmd3
  cmd4
done

doリストがどこにあるかを知る必要があります。状況コマンドが終了します。

これはBourneシェルではサポートされていませんfor i; do。標準の2016バージョン以前は、この構文もPOSIXではありませんでした(for i do常に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またはを変数名として使用することはできません。)doj

文書化されることはほとんどありませんが、ほとんどのBourne様シェル(Bourne、ksh、bash、zsh、notnor ash)はyash以下をサポートします。

for i in 1 2 3; { echo "$i";}

Bourne シェルkshzsh以下をbashサポートします。

for i { echo "$i"; }

And bashkshおよびzsh(Bourneシェルではない)サポート:

for i; { echo "$i"; }

すべて(Bourne、、、bashkshサポートzsh

for i
{ echo "$i";}

ksh93bashzsh支える:

for ((i=1;i<=3;i++)) { echo "$i"; }

関連情報