The syntax to assign a value to a variable is foo=bar
, not foo = bar
. Whitespaces matter. The latter syntax is a command foo
with arguments =
and bar
.
Few examples of how =
is interpreted:
code | meaning |
---|---|
foo=bar |
proper assignment; now the value of foo is bar |
foo = bar |
command foo with arguments = and bar |
foo =bar |
command foo with one argument =bar |
foo= bar |
command bar with foo in its environment; the value of foo is empty |
foo=1 bar |
command bar with foo in its environment; the value of foo is 1 |
foo='1 bar' |
proper assignment; now the value of foo is 1 bar |
foo=' bar' |
proper assignment; now the value of foo is bar (note the leading space) |
foo=\ bar |
proper assignment; now the value of foo is bar (note the leading space) |
foo-x=bar |
command foo-x=bar because (because foo-x is not a valid name for a shell variable) |
This is not specific to Zsh. The POSIX shell (sh
) and POSIX-compliant shells behave this way. Zsh (while not being POSIX-compliant in general) also follows.