Using unset to destroy array elements doesn't work with 'nullglob' set
Hello, My version of bash is "GNU bash, version 3.2.33(1)-release (x86_64- redhat-linux-gnu)" running on a fedora 9. Here's is a small script to show the bug: #!/bin/bash #shopt -s nullglob foo[0]=0 unset foo[0] echo ${f...@]} When shopt line is commented then the element at index 0 is destroyed and the echo doesn't output anything. However is a uncomment the shopt line the element at index 0 is not destroyed anymore and the echo output "0". Thanks.
Re: Using unset to destroy array elements doesn't work with 'nullglob' set
On Fri, Jun 05, 2009 at 08:35:15AM -0700, Francis Moreau wrote: > unset foo[0] This is a problem in your script, unfortunately. Even without nullglob, this can still fail if you happen to have a file named foo0 in your current working directory, which would be matched as a glob. For total safety, you must quote it: unset 'foo[0]'
Re: Using unset to destroy array elements doesn't work with 'nullglob' set
On Fri, Jun 5, 2009 at 6:05 PM, Greg Wooledge wrote: > On Fri, Jun 05, 2009 at 08:35:15AM -0700, Francis Moreau wrote: >> unset foo[0] > > This is a problem in your script, unfortunately. Even without nullglob, > this can still fail if you happen to have a file named foo0 in your > current working directory, which would be matched as a glob. > > For total safety, you must quote it: > > unset 'foo[0]' > oh yes you're right ! thanks -- Francis
Re: Using unset to destroy array elements doesn't work with 'nullglob' set
Francis Moreau wrote: > Hello, > > My version of bash is "GNU bash, version 3.2.33(1)-release (x86_64- > redhat-linux-gnu)" running on a fedora 9. > > Here's is a small script to show the bug: > > #!/bin/bash > > #shopt -s nullglob > > foo[0]=0 > unset foo[0] > echo ${f...@]} > > When shopt line is commented then the element at index 0 is destroyed > and the echo doesn't output anything. However is a uncomment the shopt > line the element at index 0 is not destroyed anymore and the echo > output "0". This is why the man page says: The unset builtin is used to destroy arrays. unset name[subscript] destroys the array element at index subscript. Care must be taken to avoid unwanted side effects caused by filename generation. In this case, you should quote the argument if you don't want globbing to potentially alter it. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/