Re: Bash and arrays

2009-07-15 Thread Jay Hall


On Jul 15, 2009, at 12:53 AM, Dan Nelson wrote:


In the last episode (Jul 15), Bryan Venteicher said:
I thought I understood how arrays work in bash, but I have been  
proven

wrong.  I am reading lines from a file and placing them in an array.
However, when I am finished, the array has a length of 0.

Following is the code I am using.

#!/usr/local/bin/bash
COUNTER=0
cat ./test_file.txt | while read LINE
do
echo ${LINE}
FOO[${COUNTER}]=${LINE}
COUNTER=`expr ${COUNTER} + 1`
done

echo ${#f...@]}
echo ${#FOO[*]}


And, here is the output.

test_file
file_size
0
0

Thanks in advance for any help you can offer.


The right hand side of the pipe is running in its own subshell so
it has its own copy of FOO.

One fix is
#!/usr/local/bin/bash
COUNTER=0
while read LINE
do
echo ${LINE}
FOO[${COUNTER}]=${LINE}
COUNTER=`expr ${COUNTER} + 1`
done < ./test_file.txt


Another alternative would be to use zsh, which makes sure that the  
last
component of a pipeline is run in the current shell process so the  
original

script would have worked.

--
Dan Nelson
dnel...@allantgroup.com

Thanks to everyone for their help.  I had forgotten the right side of  
the pipe runs in its own subshell.



Jay

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"


Re: Bash and arrays

2009-07-14 Thread Dan Nelson
In the last episode (Jul 15), Bryan Venteicher said:
> > I thought I understood how arrays work in bash, but I have been proven
> > wrong.  I am reading lines from a file and placing them in an array. 
> > However, when I am finished, the array has a length of 0.
> > 
> > Following is the code I am using.
> > 
> > #!/usr/local/bin/bash
> > COUNTER=0
> > cat ./test_file.txt | while read LINE
> > do
> >  echo ${LINE}
> >  FOO[${COUNTER}]=${LINE}
> >  COUNTER=`expr ${COUNTER} + 1`
> > done
> > 
> > echo ${#f...@]}
> > echo ${#FOO[*]}
> > 
> > 
> > And, here is the output.
> > 
> > test_file
> > file_size
> > 0
> > 0
> > 
> > Thanks in advance for any help you can offer.
> 
> The right hand side of the pipe is running in its own subshell so
> it has its own copy of FOO.
> 
> One fix is
> #!/usr/local/bin/bash
> COUNTER=0
> while read LINE
> do
>  echo ${LINE}
>  FOO[${COUNTER}]=${LINE}
>  COUNTER=`expr ${COUNTER} + 1`
> done < ./test_file.txt

Another alternative would be to use zsh, which makes sure that the last
component of a pipeline is run in the current shell process so the original
script would have worked.

-- 
Dan Nelson
dnel...@allantgroup.com
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"


Re: Bash and arrays

2009-07-14 Thread Bryan Venteicher

- Jay Hall  wrote:
> Ladies and Gentlemen,
> 
> I thought I understood how arrays work in bash, but I have been proven  
> wrong.  I am reading lines from a file and placing them in an array.   
> However, when I am finished, the array has a length of 0.
> 
> Following is the code I am using.
> 
> #!/usr/local/bin/bash
> COUNTER=0
> cat ./test_file.txt | while read LINE
> do
>  echo ${LINE}
>  FOO[${COUNTER}]=${LINE}
>  COUNTER=`expr ${COUNTER} + 1`
> done
> 
> echo ${#f...@]}
> echo ${#FOO[*]}
> 
> 
> And, here is the output.
> 
> test_file
> file_size
> 0
> 0
> 
> Thanks in advance for any help you can offer.

The right hand side of the pipe is running in its own subshell so
it has its own copy of FOO.

One fix is
#!/usr/local/bin/bash
COUNTER=0
while read LINE
do
 echo ${LINE}
 FOO[${COUNTER}]=${LINE}
 COUNTER=`expr ${COUNTER} + 1`
done < ./test_file.txt

> 
> 
> Jay
> ___
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"