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"

Reply via email to