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"