§关于while循环§ 小弟有一个疑问?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
fearmind
帖子: 212
注册时间: 2007-08-24 13:32

§关于while循环§ 小弟有一个疑问?

#1

帖子 fearmind » 2008-12-25 15:43

请看这个代码:

代码: 全选

#!/bin/bash
# generate a index
index=0
last |\
while read TMPLINE;do
     echo -n $index 
     echo -n ","
     index=$(($index+1)) # index明明在增加的!
done
echo
echo -n "index="
echo $index # 为什么这里的index还是等于0?
这是输出结果
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,3
6,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,
53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69
,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,8
6,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,1
02,103,104,105,106,107,108,109,110,111,112,113,114
,115,116,117,118,119,120,121,122,123,124,125,126,1
27,128,129,130,131,132,133,134,135,136,137,138,139
,140,141,142,143,144,145,146,147,148,149,150,151,1
52,153,154,155,156,157,158,159,160,161,162,163,164
,165,166,167,168,169,170,171,172,173,174,175,176,1
77,178,179,180,181,182,183,184,185,186,187,188,189
,190,191,192,193,194,195,196,197,198,199,200,201,
index=0
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我在想是不是管道的问题哦? :em23

代码: 全选

#!/bin/bash
i=0
while [ $i -lt 10 ];do
        i=$(($i+1))
        echo -n $i
        echo -n ","
done
echo
echo "i is: $i"
这个脚本的输出是符合期望值的:
1,2,3,4,5,6,7,8,9,10,
i is: 10
上次由 fearmind 在 2008-12-25 16:15,总共编辑 2 次。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: §关于while循环§ 小弟有一个疑问?

#2

帖子 xiooli » 2008-12-25 15:53

确实很怪呢 :em06
头像
fearmind
帖子: 212
注册时间: 2007-08-24 13:32

Re: §关于while循环§ 小弟有一个疑问?

#3

帖子 fearmind » 2008-12-25 15:54

while循环结束后是不是要对里面的使用的变量复原阿?疑惑中…… :em20
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: §关于while循环§ 小弟有一个疑问?

#4

帖子 cnkilior » 2008-12-25 16:52

代码: 全选

last |\
while read TMPLINE;do
     echo -n $index
     echo -n ","
     index=$(($index+1)) # index明明在增加的!
done
这个while在一个pipeline中,明明生成来一个子shell。
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: §关于while循环§ 小弟有一个疑问?

#5

帖子 goodluck1982 » 2008-12-25 18:42

正如ls所说,是子shell的问题
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51

Re: §关于while循环§ 小弟有一个疑问?

#6

帖子 c\nc » 2008-12-25 20:57

子 shell 的问题,用进程替换吧:

代码: 全选

while read X; do
	:...
done < <(last)
头像
fearmind
帖子: 212
注册时间: 2007-08-24 13:32

Re: §关于while循环§ 小弟有一个疑问?

#7

帖子 fearmind » 2008-12-26 14:56

cnkilior 写了:

代码: 全选

last |\
while read TMPLINE;do
     echo -n $index
     echo -n ","
     index=$(($index+1)) # index明明在增加的!
done
这个while在一个pipeline中,明明生成来一个子shell。
原来是这样阿~ :em11
回复