Bash do
ループ構文のfor
キーワードの目的は何ですか?私には、それは冗長だと感じています。
for i in `seq 1 2`; do echo "hi"; done
なぜこのような構文ではないのですか?
for i in `seq 1 2`; echo "hi"; done
きっとします目的を満たします。ただ学びたいだけです。
この構文はBourne Shellから継承されていることに注意してください。
変数名の後には、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
conditionコマンドのリストがどこで終了するかを通知するには、do
が必要です。
Bourne Shellはfor i; do
をサポートしていないことに注意してください。その構文は、標準の2016年版までPOSIXでもありませんでした(for i do
は常にPOSIXでした。 関連するAustinグループのバグ を参照してください)。
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 Shell、ksh
およびzsh
(bash
は除く)もサポートします。
for i { echo "$i"; }
bash
、ksh
およびzsh
(ただしBourne Shellはサポートしていません)は次をサポートします:
for i; { echo "$i"; }
すべての(ボーン、bash
、ksh
、zsh
)サポート:
for i
{ echo "$i";}
ksh93
、bash
、zsh
サポート:
for ((i=1;i<=3;i++)) { echo "$i"; }