Bash for 循环中“do”关键字的用途是什么?

Bash for 循环中“do”关键字的用途是什么?

doBashfor循环语法中关键字的用途是什么?对我来说,这感觉是多余的。

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

为什么语法不是这样的?

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

我确信它填补一个目的。我只是想学习。

答案1

请注意,该语法是从 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/循环一致。untildo

while
  cmd1
  cmd2
do
  cmd3
  cmd4
done

你需要do知道列表的位置状况命令结束。

请注意,Bourne shell 不支持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

(尽管您不能使用inordo作为变量名来代替j上面的变量名)。

即使很少有记录,大多数类似 Bourne 的 shell(Bourne、ksh、bash、zsh、notnor ashyash也支持:

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

Bourne shellkshzsh(但不bash)还支持:

for i { echo "$i"; }

bashkshzsh(但不是 Bourne shell)支持:

for i; { echo "$i"; }

所有(Bourne、、、bashksh支持zsh

for i
{ echo "$i";}

ksh93bashzsh支持:

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

相关内容