在Bourne和Korn贝壳中像Bash一样的循环?

时间:2015-09-07 12:15:12

标签: for-loop sh ksh portability

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

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

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

1 个答案:

答案 0 :(得分:3)

如果您的脚本必须与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