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

Attachment: pgp22DokPyk82.pgp
Description: PGP signature

Reply via email to