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