请告诉我下面的UNIX代码有什么问题。
#!/bin/ksh
p=10
for i in $p
do
echo $i
done
我期待输出为
1
2
3
.
.
.
但输出的结果只有10 我需要循环而不是循环。
答案 0 :(得分:3)
#!/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
可用于 ksh 和 bash 。但它是 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
,这个复杂的结构是必要的
答案 1 :(得分:1)
您必须指定一个范围。否则循环不起作用。这应该这样做:
#!/bin/ksh
p=10
for i in {0..$p}
do
echo $i
done
@fedorqui:你是对的,我绝对错过了。当我在Bash中做这样的事情时(我不知道它对于KornShell是否相同),我会像:
for ((i=0; i<$p; i++))
答案 2 :(得分:0)
#!/bin/ksh
while [ ${i:=1} -le 10 ]
do
echo "$i"
let i+=1
done