为什么 Zsh 抱怨我的变量赋值是“未找到命令”?

为什么 Zsh 抱怨我的变量赋值是“未找到命令”?

当我尝试在 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 = barfoo。空格很重要。后一种语法是带有参数=和的命令bar

=以下是一些解释方法的示例:

代码 意义
foo=bar 正确的分配;现在的值foobar
foo = bar foo带参数的命令=bar
foo =bar foo带有一个参数的命令=bar
foo= bar 在其环境中bar带有的命令;的值为空foofoo
foo=1 bar bar在其环境中使用命令foo;的值foo1
foo='1 bar' 正确的分配;现在的值foo1 bar
foo=' bar' 正确分配;现在的值为foobar注意前导空格)
foo=\ bar 正确分配;现在的值为foobar注意前导空格)
foo-x=bar 命令foo-x=bar(因为foo-x不是 shell 变量的有效名称)

这并不是 Zsh 独有的。POSIX shell ( sh) 和 POSIX 兼容 shell 的行为都是这样的。Zsh(虽然一般不符合 POSIX 标准)也遵循此规则。

相关内容