我该如何在ksh中使用for循环遍历一个简单的整数范围?
比如,我的脚本目前是这样的...
for i in 1 2 3 4 5 6 7
do
#stuff
done
...但我希望将范围扩展到7以外,有更好的语法吗?
花括号?
for i in {1..7}
do
#stuff
done
While循环?
while [[ $i -lt 1000 ]] ; do
# stuff
(( i += 1 ))
done
((i+=1))
替换为 i=$((i+1))
。 - ezequiel-garzoni=0
之后,这个程序可以正常运行。我正在运行 AIX 6.1.0.0,没有 seq
命令,但在我的新安装的 7.1.0.0
版本上可以使用。 - Wally{1..1000}
无法使用。 - Davy Mksh93、Bash 和 zsh 都可以理解类 C 语言的 for
循环语法:
for ((i=1; i<=9; i++))
do
echo $i
done
很遗憾,虽然 ksh 和 zsh 可以使用花括号范围语法来处理常量和变量,但是 Bash 仅能处理常量(包括 Bash 4)。
echo $KSH_VERSION
或者echo ${.sh.version}
。 - Dennis Williamson在OpenBSD上,请使用jot命令:
for i in `jot 10`; do echo $i ; done;
seq
:for i in $(seq 1 10)
do
echo $i
done
#!/bin/ksh
d=100
while (( $d < 200 ))
do
echo "hdisk$d"
(( d=$d+1 ))
done
如果你想在数字前面补零,让数字变成五位数,比如 00100 .. 00199,你可以这样开始:
#!/bin/ksh
typeset -Z5 d
由于AIX没有范围操作符或seq,以下是我在IT技术中使用的一些滥用perl的示例。
这里是一个for循环,使用类似seq的perl语法:
for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done
perl -le 'print "$_ " for 1..10;' | while read X ; do xargs -tn1 ls $X ; done
我最喜欢的是使用类似bash的shell通配符,这种情况下可以使用perl进行排列组合。
perl -le 'print for glob "e{n,nt,t}{0,1,2,3,4,5}"' | xargs -n1 rmdev -dl
ksh93
;ksh
基于较旧、有限的ksh88
。同样适用于Solaris,包括Solaris 10。 - Henk Langeveld{01..219}
这样的表达式(在zsh中)也可以工作,即被解析为 "01 02 ... 09 10 11 .. 99 100 101 102 ... 219"。 - Albert