30

如何在 ksh 中使用 for 循环遍历一个简单的整数范围?

例如,我的脚本当前执行此操作...

for i in 1 2 3 4 5 6 7
do
   #stuff
done

...但我想将范围扩展到 7 以上。有更好的语法吗?

4

7 回答 7

46

大括号?

for i in {1..7}
do
   #stuff
done
于 2009-10-19T21:22:50.857 回答
15

while循环?

while [[ $i -lt 1000 ]] ; do
    # stuff
   (( i += 1 ))
done
于 2009-10-19T21:21:31.873 回答
11

ksh93、 Bash 和 zsh 都理解类 Cfor循环语法:

for ((i=1; i<=9; i++))
do
    echo $i
done

不幸的是,虽然ksh和 zsh 理解带有常量和变量的花括号范围语法,但 Bash 只处理常量(包括 Bash 4)。

于 2009-10-19T22:22:44.770 回答
10

在 OpenBSD 上,使用 jot:

for i in `jot 10`; do echo $i ; done;
于 2010-10-28T17:15:42.643 回答
6

使用seq

for i in $(seq 1 10)
do 
  echo $i
done
于 2009-11-30T18:50:48.697 回答
5

以下将适用于 AIX/Linux/Solaris ksh。

#!/bin/ksh

d=100

while (( $d < 200 ))
do
   echo "hdisk$d"
  (( d=$d+1 ))
done

可选地,如果您想填充到 5 个位置,即 00100 .. 00199 您可以从以下开始:

#!/bin/ksh
typeset -Z5 d

-斯科特

于 2013-01-10T16:38:02.303 回答
2

我只在 AIX 中使用了几个示例,因为没有范围运算符或 seq,而是滥用 perl。

这是一个 for 循环,使用 perl like seq:

for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done

这很相似,但我更喜欢 while read 循环而不是 for。没有反引号或空格问题。

perl -le 'print "$_ " for 1..10;' | while read X ; do xargs -tn1 ls $X ; done

我的最爱,做类似 bash 的 shell globbing,在这种情况下使用 perl 排列。

perl -le 'print for glob "e{n,nt,t}{0,1,2,3,4,5}"' | xargs -n1 rmdev -dl
于 2012-04-18T17:11:23.853 回答