繁体   English   中英

UNIX中的循环不起作用

[英]Loop in UNIX is not working

请告诉我下面的UNIX代码有什么问题。

#!/bin/ksh

 p=10
 for i in $p
 do
  echo $i
 done

我期待输出为

1
2
3
.
.
.

但输出到的只是10我需要循环而不是循环。

ksh

#!/bin/ksh
p=10
i=1
while ((i<=p)); do
  echo $i
  i=$((i+1))
  done

要么

#!/bin/ksh
# with for you can only do this
for i in 1 2 3 4 5 6 7 8 9 10; do
  echo $i
  done

bash中它按预期工作

#!/bin/bash
p=10
for (( i=1; i<=p; i++ )); do 
  echo $i
  done

有一个Linux命令seq ,可以用于kshbash 但这是一个Linux命令。 因此,这不适用于Solaris或其他未安装progrtam seq的 Unix系统。

# on Linux, bash or ksh
p=10
for i in $(seq $p); do 
  echo $i
  done

以下仅使用shell内置函数,因此适用于所有bash安装(例如在Solaris上),但不适用于ksh

#!/bin/bash
p=10
for i in `eval echo {1..$p}`; do 
  echo $i
  done

这种复杂的结构是必要的,因为在可变膨胀之前发生支撑膨胀

你必须指定一个范围。 否则循环不起作用。 这应该这样做:

#!/bin/ksh

 p=10
 for i in {0..$p}
 do
  echo $i
 done

@fedorqui:你是对的,我绝对错过了。 当我在Bash中做这样的事情时(我不知道KornShell是否相同),我想:

for ((i=0; i<$p; i++))

在UNIX KSH中

#!/bin/ksh

while [ ${i:=1} -le 10 ]
 do
  echo "$i"
  let i+=1
 done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM