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
pgp22DokPyk82.pgp
Description: PGP signature
