When I try to write a Zsh script on macOS Big Sur, Version 11.5.1, I noticed that it keeps failing to recognize my variables as variables.
Instead, Zsh treats them as UNIX-like commands.
In the screenshot linked above, I did the following on the Terminal application.
- Showed the contents of the simple Zsh shell script.
- Used the "ls -l" UNIX-like command to indicate its file permissions, and show that it is an executable Zsh shell script.
- Executed the Zsh shell script, which shows that the Zsh script interpreter complains of how my variable name is a "command not found".
The source code for my Zsh shell script is provided as follows:
#!/bin/zsh
unix_cmd = "ls -al"
Can you please kindly let me know what am I missing, and what did I do wrong?
I just want to assign values to variables in my Zsh shell scripts.
Thank you so much, and have a great day! Ciao!
Best Answer
The syntax to assign a value to a variable is
foo=bar
, notfoo = bar
. Whitespaces matter. The latter syntax is a commandfoo
with arguments=
andbar
.Few examples of how
=
is interpreted:foo=bar
foo
isbar
foo = bar
foo
with arguments=
andbar
foo =bar
foo
with one argument=bar
foo= bar
bar
withfoo
in its environment; the value offoo
is emptyfoo=1 bar
bar
withfoo
in its environment; the value offoo
is1
foo='1 bar'
foo
is1 bar
foo=' bar'
foo
isbar
(note the leading space)foo=\ bar
foo
isbar
(note the leading space)foo-x=bar
foo-x=bar
(becausefoo-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.