On Tue, Jul 29, 2008 at 1:00 AM, Xavier <shiningxc@gmail.com> wrote:
On Tue, Jul 29, 2008 at 2:06 AM, Henning Garus <henning.garus@googlemail.com> wrote:
On Mon, 28 Jul 2008 23:44:13 +0200 Xavier <shiningxc@gmail.com> wrote:
Anyway, I have something else, look : [xavier@nx7400 ~]$ array=('' {foo,bar,baz}) [xavier@nx7400 ~]$ [ -z "${array[@]}" ] || echo array not empty bash: [: too many arguments array not empty [xavier@nx7400 ~]$ [ -z "${array[*]}" ] || echo array not empty array not empty
I never understood what the differences between @ and * were though...
The way I understand it "${array[@]}" is expanded to "foo" "bar" "baz", while "${array[*]}" is expanded to "foo%bar%baz" where % is the first character of $IFS (meaning ' ' if not set otherwise).
So with @ you get several words for the test, which would explain the observed behaviour.
Interestingly enough [[ -z "${array[@]}" ]] seems to work as well...
Hmm now we have too many solutions and I don't know which one to choose. 1) [ -z "$array" ] 2) [ -z "${array[*]}" ] 3) [[ -z "${array[@]}" ]]
(the current problematic one is [ -z "${array[@]}" ] ). So you can vote now :)
I think (2) is what we are looking for. "If the array (as a whole) contains anything, then..." -Dan