在foo.sh 中,为了便于阅读,我将一些命令(或函数)拆分为多行并添加了注释:
#!/bin/zsh
#
# foo.sh: print computer information
foo() {
uname \
-p `# processor arch` \
-s `# os name` \
-v `# os version`
}
foo
Run Code Online (Sandbox Code Playgroud)
我可以正常运行:
$ ./foo.sh
Darwin 123... (correct output)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用source
or 获取它.
,我的 shell 会报告以下错误,尽管它自己使用我指定的参数 ( -psv
)成功运行了命令:
% . ./foo.sh
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
Darwin 123... (correct output as before)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会发生这种情况?我该如何解决?因为我的主要目标是定义一些函数,获取它们,并根据需要在 shell 中调用它们。谢谢!
Gil*_*il' 10
默认情况下,zsh 仅识别脚本中的注释,而不识别交互式运行时的注释。这应该适用于源脚本,但在最近的版本中(我已经在 5.8 中重现了这种行为,但 5.4.2 可以很好地接受您的代码),这也适用于加载后解析的一些代码,例如命令替换中的代码. 这可能是一个错误。
把setopt interactive_comments
你的.zshrc
交互方式运行时,支持的意见。这并没有真正的缺点:这意味着您必须#
在单词的开头引用,但#
在命令行中很少出现在单词的开头。(#
单词内不开始注释,因此这不会影响#
用作extended_glob
通配符或参数扩展。)
或者(或另外),添加
setopt local_options interactive_comments
Run Code Online (Sandbox Code Playgroud)
函数内部。然后评论将起作用。