Bash-类似于 Bourne 和 Korn shell 中的 for 循环?

Bash-like for loop in the Bourne and Korn shells?

我需要读取用户的输入 (N) 并执行循环 N 次以执行一组语句。在 bash 中,我可以使用以下 for 循环语法:

read N 
for((i=0;i<$N;i++)) 
set of statements 

但是,我无法在 shksh 等 shell 中使用该语法。我应该怎么做呢?

如果您的脚本必须与 Bourne shell (sh) 兼容,请注意后者不提供数字 "C-like" for 循环语法 (for((i=0;i<$N;i++))).但是,您可以改用 while 循环。

这是一个符合 POSIX 的方法,它在 shksh 中都能正常工作:

read N

i=0                   # initialize counter
while [ $i -lt $N ]
do
  printf %s\n "foo"  # statements ... 
  i=$((i+1))         # increment counter
done

测试:

$ sh test.sh 
3
foo
foo
foo
$ ksh test.sh 
4
foo
foo
foo
foo
$ dash test.sh  # (dash is a minimalist, POSIX-compliant shell)
2
foo
foo