2
我需要读取用户的输入(N
)并执行循环N
来执行一组语句。在bash
,我可以使用下面的for循环语法:Bash和Korn shell中的Bash-like循环?
read N
for((i=0;i<$N;i++))
set of statements
但是,我不能用在外壳如sh
或ksh
这句法。相反,我该怎么做?
我需要读取用户的输入(N
)并执行循环N
来执行一组语句。在bash
,我可以使用下面的for循环语法:Bash和Korn shell中的Bash-like循环?
read N
for((i=0;i<$N;i++))
set of statements
但是,我不能用在外壳如sh
或ksh
这句法。相反,我该怎么做?
如果您的脚本必须与Bourne shell(sh
)兼容,请注意后者不提供数字“类似C”的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
谢谢,这确实有帮助... –
无需使用'expr'; '我= $((i + 1))'符合POSIX标准。 – chepner
@chepner你说得对。谢谢。 – Jubobs