do
Bashループ構文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と一致します。until
do
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
またはを変数名として使用することはできません。)do
j
文書化されることはほとんどありませんが、ほとんどのBourne様シェル(Bourne、ksh、bash、zsh、notnor ash
)はyash
以下をサポートします。
for i in 1 2 3; { echo "$i";}
Bourne シェルksh
はzsh
以下をbash
サポートします。
for i { echo "$i"; }
And 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"; }