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