Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: string equal problem



On Mar 7,  5:04pm, Lyre wrote:
} Subject: string equal problem
}
} if [ "abc" == "def" ]; then echo y; else echo n; fi
} 
} doesn't work, it says "zsh: = not found".

 14.7.3 `=' expansion
 --------------------
 If a word begins with an unquoted `=' and the EQUALS option is set, the
 remainder of the word is taken as the name of a command.  If a command
 exists by that name, the word is replaced by the full pathname of the
 command.

What the doc doesn't go on to say is that if a command does NOT exist
by that name, it's an error.

The "test" command/builtin, for which "[" is an alias, doesn't normally
allow "==" as an operator; rather, it uses "=" for this comparison.

    /usr/bin/test: ==: binary operator expected

As it happens, zsh does allow == as an operator for test, but you must
either quote it or unsetopt EQUALS, because the arguments of test are
subject to filename expansion.

If you want to use == without messing with the option, try this way:

    if [[ "abc" == "def" ]]; then echo y; else echo n; fi

The "[[" reserved word imposes different parsing rules on the expression
it introduces, so there == is not subject to expansion.

} All of them doesn't work, except the zsh 4.2.0 on sles9.

SUSE must unsetopt EQUALS in /etc/zshenv, or some other startup file,
because no zsh since around version 2 (maybe longer) has been different
in this regard.



Messages sorted by: Reverse Date, Date, Thread, Author