听说bash里如果不用关键字local定义的变量都是全局变量,但是在下面的两段while循环里为何变量count及数组aTest, cTest的值都不能带回呢?比如count 在第一个循环里变成了5,而退出循环后却变成了0。而for循环里数组bTest和count的值是可以带回的:
count is 4
array nuber : 4
bTest [3] : 3
代码:
#!/bin/bash
declare -i count
count=0
ls | sort | while read perline
do
echo $perline
aTest[$count]=$perline
echo aTest [$count] : ${aTest[$count]}
count=$count+1
echo count : $count
echo array nuber : ${#aTest[*]}
done
echo
echo exit while
echo count is $count
echo array nuber : ${#aTest[*]}
echo aTest [3] : ${aTest[3]}
echo -----------------------------------------------------
count=0
for ((i=0;i<4;i++))
do
bTest[$count]=$i
echo bTest [$count] : ${bTest[$count]}
count=$count+1
echo count : $count
echo array nuber : ${#bTest[*]}
done
echo
echo exit for
echo count is $count
echo array nuber : ${#bTest[*]}
echo bTest [3] : ${bTest[3]}
echo -----------------------------------------------------
count=0
echo {0..3} | sed 's/ /\n/g' | (while read perline
do
echo $perline
cTest[$count]=$perline
echo cTest [$count] : ${cTest[$count]}
count=$count+1
echo count : $count
echo array nuber : ${#cTest[*]}
done
)
echo
echo exit while
echo count is $count
echo array nuber : ${#cTest[*]}
echo cTest [3] : ${cTest[3]}
运行结果:
tmp1
aTest [0] : tmp1
count : 1
array nuber : 1
tmp2
aTest [1] : tmp2
count : 2
array nuber : 2
tmp3
aTest [2] : tmp3
count : 3
array nuber : 3
tmp4
aTest [3] : tmp4
count : 4
array nuber : 4
tmp4.log
aTest [4] : tmp4.log
count : 5
array nuber : 5
exit while
count is 0
array nuber : 0
aTest [3] :
-----------------------------------------------------
bTest [0] : 0
count : 1
array nuber : 1
bTest [1] : 1
count : 2
array nuber : 2
bTest [2] : 2
count : 3
array nuber : 3
bTest [3] : 3
count : 4
array nuber : 4
exit for
count is 4
array nuber : 4
bTest [3] : 3
-----------------------------------------------------
0
cTest [0] : 0
count : 1
array nuber : 1
1
cTest [1] : 1
count : 2
array nuber : 2
2
cTest [2] : 2
count : 3
array nuber : 3
3
cTest [3] : 3
count : 4
array nuber : 4
exit while
count is 0
array nuber : 0
cTest [3] :
请问这是为什么?如何让while循环有for循环那样的效果?之所以用while,是觉得它从文件里读整行的数据进行处理比较方便
关于bash while循环里变量的作用域的问题
-
- 帖子: 2
- 注册时间: 2012-11-30 17:37
- 系统: Windows 7
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 关于bash while循环里变量的作用域的问题
管道然后,就创建新进程了……
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
-
- 帖子: 2
- 注册时间: 2012-11-30 17:37
- 系统: Windows 7
Re: 关于bash while循环里变量的作用域的问题
多谢指点。这种情况是否只有用临时文件给while或者把变量export才行了?