[求助]关于while循环中数组的赋值问题

[求助]关于while循环中数组的赋值问题

i=0
cat $ALLGROUPFILE_PATH | while read line
do
  ALL_GROUP[i]=$line
  let i=i+1
done
echo ${#ALLREGION[@]}


请问各位大哥,最后一句的echo ${#ALLREGION[@]}为什么打印出的数组长度是空呢?

怎样才能在while循环的外面得到这个数组的长度呢?



拜托了

      
引用:
原帖由 antonyhot 于 2007-9-21 09:45 发表
i=0
cat $ALLGROUPFILE_PATH | while read line
do
  ALL_GROUP=$line
  let i=i+1
done
echo ${#ALLREGION[@]}


请问各位大哥,最后一句的echo ${#ALLREGION[@]}为什么打印出的数组长度是空呢?

...
直接看不懂, 前面没有对 ALLREGION 的赋值啊

BTW: 发贴请突出主题       
引用:
原帖由 dearvoid 于 2007-9-21 11:03 发表

直接看不懂, 前面没有对 ALLREGION 的赋值啊

BTW: 发贴请突出主题
我写了ALLREGION[i]=$line

但是中括号写半角的在页面上显示不出来,现在我改成全角的.....日啊      
引用:
原帖由 antonyhot 于 2007-9-21 11:13 发表


我写了ALLREGION[i]=$line

但是中括号写半角的在页面上显示不出来,现在我改成全角的.....日啊
贴 code/script 时最好写在 [code] ... [/code] 里面

      
回到正题: 管道符 | 之后的命令是在一个 sub-shell 中执行的, 其结果不会影响当前 shell, 所以当命令执行结束后, ALLREGION 是没有值的      
解决方案: 用重定向而不是管道. 举例:
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[31048 0] ; cat file
1
2
3
4
5
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[31048 0] ; cat file.sh
#!/bin/bash

arr=()
i=0
while read line; do
    arr[i++]=$line
done < file
echo ${#arr[@]}
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[31048 0] ; ./file.sh
5
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[31048 0] ; bye
      
哦,那我明白了.

非常谢谢dearvoid版主!

不过这样的话另一个问题就来了,那我应该怎样将一个文件中的
内容按行读入到数组中,并且使用该数组呢?

我的意思是在while循环中将内容echo出来对我来说是没有任务帮助的
要在while循环后再使用这个已经赋了值的数组.      
bash 的 manual 里面有这么一句话:
引用:
Each command in a pipeline is executed as a separate process (i.e., in a subshell).
      
好的,再次感谢dearvoid版主!

我这次全明白了,呵呵,上个贴子发晚了,不好意思      
引用:
原帖由 antonyhot 于 2007-9-21 11:34 发表
那我应该怎样将一个文件中的
内容按行读入到数组中,并且使用该数组呢?

我的意思是在while循环中将内容echo出来对我来说是没有任 ...
前面已经给了例子啊