注册 登录
编程论坛 Linux教室

bash中的while产生子进程的问题

明明白白 发布于 2012-09-02 20:58, 650 次点击
#!/bin/bash

i=0
while [ $i -lt 10 ]
do
    echo hello
    i=`expr $i + 1`
    sleep 1
done
echo "i="$i
结果输出10,但是我记得老师讲的时候输出的是0。会不会是linux版本不同?
9 回复
#2
有容就大2012-09-02 22:22
初学 帮顶。。

#3
madfrogme2012-09-02 22:49
不明白怎么得到0, 我的机器上是10

为什么把while 下面的语句叫 子进程?

i=`expr $i + 1`   这是一个 arithmetic expansion with backticks
也可以写成
let i=i+1
i=$(($i+1))

不好意思,没能给你满意的答覆
但如果机器都显示10, 那大概就是你记错了?

这和linux版本不同没什么联系吧
#4
pangding2012-09-03 00:48
怎么也不会是零呀。只有一个相当于 ++i 的语句,i 是不会再变小了吧。
i = `expr $i + 1` 的写法除了 mad 说的以外,也可以写成 let ++i。

expr 是个外部程序,据说一个好的习惯是,能用 builtin 干的就不用外部程序干。

可以把 while 放在子进程里,方法是加对括号:
程序代码:
#!/bin/bash

i=0
(while [ $i -lt 10 ]
do
    echo hello
    i=`expr $i + 1`
    #sleep 1    # 注释了吧,除了费时间以外没什么用处。
done
)
echo "i="$i
这个是输出 0.
#5
madfrogme2012-09-03 09:17
以下是引用pangding在2012-9-3 01:48:10的发言:

怎么也不会是零呀。只有一个相当于 ++i 的语句,i 是不会再变小了吧。
i = `expr $i + 1` 的写法除了 mad 说的以外,也可以写成 let ++i。

expr 是个外部程序,据说一个好的习惯是,能用 builtin 干的就不用外部程序干。

可以把 while 放在子进程里,方法是加对括号:
#!/bin/bash

i=0
(while [ $i -lt 10 ]
do
    echo hello
    i=`expr $i + 1`
    #sleep 1    # 注释了吧,除了费时间以外没什么用处。
done
)
echo "i="$i这个是输出 0.


原来加上括号就可以
#6
zklhp2012-09-03 10:18
学习
#7
明明白白2012-09-03 19:59
回复 4楼 pangding
谢谢。。我懂了,求加好友,以后有问题可以请教
#8
明明白白2012-09-03 20:02
回复 4楼 pangding
求加qq,方便求教,真心的
#9
pangding2012-09-03 21:31
回复 8楼 明明白白
我很少用 qq。有问题就在论坛问吧,其他的人也会积极回答的。
#10
明明白白2012-09-03 22:07
回复 9楼 pangding
噢,知道了,谢谢
1