Re: Bash and arrays
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
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
- 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"