当我尝试在 macOS Big Sur 版本 11.5.1 上编写 Zsh 脚本时,我注意到它一直无法将我的变量识别为变量。
相反,Zsh 将它们视为类似 UNIX 的命令。
终端应用程序上的问题截图-Zsh shell 脚本的变量赋值问题
在上面链接的屏幕截图中,我做了以下操作终端应用。
- 显示简单 Zsh shell 脚本的内容。
- 使用“ls -l”类 UNIX 命令来指示其文件权限,并表明它是一个可执行的 Zsh shell 脚本。
- 执行了 Zsh shell 脚本,显示 Zsh 脚本解释器抱怨我的变量名是“未找到命令”。
我的 Zsh shell 脚本的源代码如下:
#!/bin/zsh
unix_cmd = "ls -al"
您能否告诉我我遗漏了什么以及我做错了什么?
我只是想给我的 Zsh shell 脚本中的变量分配值。
非常感谢,祝您有美好的一天!再见!
答案1
为变量赋值的语法是foo=bar
,不是 foo = bar
foo
。空格很重要。后一种语法是带有参数=
和的命令bar
。
=
以下是一些解释方法的示例:
代码 | 意义 |
---|---|
foo=bar |
正确的分配;现在的值foo 是bar |
foo = bar |
foo 带参数的命令= 和bar |
foo =bar |
foo 带有一个参数的命令=bar |
foo= bar |
在其环境中bar 带有的命令;的值为空foo foo |
foo=1 bar |
bar 在其环境中使用命令foo ;的值foo 是1 |
foo='1 bar' |
正确的分配;现在的值foo 是1 bar |
foo=' bar' |
正确分配;现在的值为foo (bar 注意前导空格) |
foo=\ bar |
正确分配;现在的值为foo (bar 注意前导空格) |
foo-x=bar |
命令foo-x=bar (因为foo-x 不是 shell 变量的有效名称) |
这并不是 Zsh 独有的。POSIX shell ( sh
) 和 POSIX 兼容 shell 的行为都是这样的。Zsh(虽然一般不符合 POSIX 标准)也遵循此规则。