通过ksh中的一系列整数进行迭代?

raz*_*ebe 21 shell ksh

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

例如,我的脚本目前正在执行此操作...

for i in 1 2 3 4 5 6 7
do
   #stuff
done
Run Code Online (Sandbox Code Playgroud)

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

mar*_*ton 37

大括号?

for i in {1..7}
do
   #stuff
done
Run Code Online (Sandbox Code Playgroud)

  • 圆括号{1..7}在ksh中不起作用.他们在Linux中做,因为linux的ksh是bash shell的符号链接.c-like sintax也不适用于正确的korn shell. (12认同)
  • 取决于ksh的版本,它在AIX中不起作用. (8认同)
  • 谢谢。甚至像 `{01..219}` 这样的东西(在 zsh 中),即评估为“01 02 ... 09 10 11 .. 99 100 101 102 ... 219”。 (3认同)
  • 哪个版本的Linux有ksh符号链接到bash? (2认同)

Lan*_*ing 15

循环?

while [[ $i -lt 1000 ]] ; do
    # stuff
   (( i += 1 ))
done
Run Code Online (Sandbox Code Playgroud)

  • 如果需要POSIX,则将`((i + = 1))`替换为`i = $((i + 1))`. (4认同)
  • 只有这一个在我试过的所有版本中都有效.我在UNIX上使用ksh.182 [[$ i -lt 1000]]; 我= $(($ i + 1))echo"asdf $ i"完成了183历史 (2认同)

Pau*_*ce. 11

ksh93,Bash和zsh都理解类C for循环语法:

for ((i=1; i<=9; i++))
do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

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


小智 8

在OpenBSD上,使用jot:

for i in `jot 10`; do echo $i ; done;
Run Code Online (Sandbox Code Playgroud)


小智 5

seq - 但仅在 linux 上可用。

for i in `seq 1 10`
do 
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

seq 还有其他选项。但其他解决方案非常好,更重要的是可移植。谢谢


小智 5

以下内容适用于AIX/Linux/Solaris ksh.

#!/bin/ksh

d=100

while (( $d < 200 ))
do
   echo "hdisk$d"
  (( d=$d+1 ))
done
Run Code Online (Sandbox Code Playgroud)

可选择如果你想填充到5个地方,即00100 .. 00199你可以开始:

#!/bin/ksh
typeset -Z5 d
Run Code Online (Sandbox Code Playgroud)

斯科特