Zsh Mailing List Archive
Messages sorted by:
Re: string equal problem
- X-seq: zsh-users 15838
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Lyre <4179e1@xxxxxxxxx>, zsh-users@xxxxxxx
- Subject: Re: string equal problem
- Date: Mon, 07 Mar 2011 01:26:25 -0800
- In-reply-to: <AANLkTi=GJPW=cVoA5hxbgVLsVMpeFehiZFjjUemail@example.com>
- List-help: <mailto:firstname.lastname@example.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:email@example.com>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <AANLkTi=GJPW=cVoA5hxbgVLsVMpeFehiZFjjUfirstname.lastname@example.org>
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
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: