Bash and arrays
Dan Nelson
dnelson at allantgroup.com
Wed Jul 15 05:53:11 UTC 2009
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 ${#FOO[@]}
> > 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
dnelson at allantgroup.com
More information about the freebsd-questions
mailing list