Gentoo Archives: gentoo-dev

From: Mike Gilbert <floppym@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] RFC: esethome
Date: Fri, 15 Jun 2012 14:25:33
Message-Id: CAJ0EP41v_fA0YEFQ41gPAR_db3bcMsui6sceY45x+LGE=mMaUA@mail.gmail.com
In Reply to: Re: [gentoo-dev] RFC: esethome by Peter Stuge
On Fri, Jun 15, 2012 at 10:05 AM, Peter Stuge <peter@×××××.se> wrote:
> Fabian Groffen wrote: >> > > >>> +       if [[ ! -n $(egetent passwd "${euser}") ]] ; then >> > > >> >> > > >> "! -n" -> "-z" >> > > > >> > > > Does the $() argument ever need to be double quoted, or do all >> > > > versions of bash actually have the string argument optional even >> > > > though that's not what the man page reads? >> > > >> > > Ever?  Yes, but only if what is being returned can contain spaces >> > >> > Sorry, I should have mentioned that I had the case of the empty >> > string in mind. >> >> Here for the same reason, the difference between [[ and [ is essential. > > It's not clear to me why? > > [] is shorthand for test. Both test and [[]] in my man bash read: > > --8<-- > Expressions are composed of the primaries described .. under > CONDITIONAL EXPRESSIONS. > -->8-- > > There it says: > --8<-- > Conditional expressions are used by the [[ compound command and > the test and [ builtin commands > -->8-- > > and: > --8<-- >       -z string >              True if the length of string is zero. >       string >       -n string >              True if the length of string is non-zero. > -->8-- > > ..which does not at all make it clear that the string is actually > optional? > > Under Command Substitution it says: > --8<-- > Embedded newlines are not deleted, but they may be removed during > word splitting. > .. > If the substitution appears within double quotes, word splitting > and pathname expansion are not performed on the results. > -->8-- > > ..confirming that there is some processing of the substitution. > > > I also did the tests before asking the question. I'm not trying to > say that the code doesn't work on my system. I'm asking if it will > work the same on every version of bash, in spite of what seems to > be a conflict between real world and documentation. > > > //Peter
Word splitting does not occur within double brackets. This is documented in the bash manual. http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs This causes empty output from a command substitution within double brackets to be treated as a zero-length string.

Replies

Subject Author
Re: [gentoo-dev] RFC: esethome Peter Stuge <peter@×××××.se>