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
但是,我无法在 sh
或 ksh
等 shell 中使用该语法。我应该怎么做呢?
如果您的脚本必须与 Bourne shell (sh
) 兼容,请注意后者不提供数字 "C-like" for 循环语法 (for((i=0;i<$N;i++))
).但是,您可以改用 while
循环。
这是一个符合 POSIX 的方法,它在 sh
和 ksh
中都能正常工作:
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
我需要读取用户的输入 (N
) 并执行循环 N
次以执行一组语句。在 bash
中,我可以使用以下 for 循环语法:
read N
for((i=0;i<$N;i++))
set of statements
但是,我无法在 sh
或 ksh
等 shell 中使用该语法。我应该怎么做呢?
如果您的脚本必须与 Bourne shell (sh
) 兼容,请注意后者不提供数字 "C-like" for 循环语法 (for((i=0;i<$N;i++))
).但是,您可以改用 while
循环。
这是一个符合 POSIX 的方法,它在 sh
和 ksh
中都能正常工作:
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