Bash and arrays
Jay Hall
jhall at socket.net
Wed Jul 15 17:58:41 UTC 2009
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 ${#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
>
Thanks to everyone for their help. I had forgotten the right side of
the pipe runs in its own subshell.
Jay
More information about the freebsd-questions
mailing list