在foo.sh中,为了便于阅读,我将一些命令(或函数)拆分为多行并添加了注释:
#!/bin/zsh
#
# foo.sh: print computer information
foo() {
uname \
-p `# processor arch` \
-s `# os name` \
-v `# os version`
}
foo
什么有效
我可以正常运行:
$ ./foo.sh
Darwin 123... (correct output)
什么不起作用
但是,如果我使用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)
我想知道为什么会这样?我该如何解决?因为我的主要目标是定义一些函数,获取它们,并根据需要在 shell 中调用它们。谢谢!
默认情况下,zsh 只识别脚本中的注释,而不是交互运行时。这应该适用于源脚本,但在最近的版本中(我在 5.8 中重现了这种行为,但 5.4.2 可以很好地接受您的代码),这也适用于加载后解析的一些代码,例如命令替换中的代码. 这可能是一个错误。
在交互式运行时
setopt interactive_comments
加入您.zshrc
的支持评论。这并没有真正的缺点:这意味着您必须#
在单词的开头引用,但#
很少出现在命令行上的单词开头。(#
在一个单词中不会开始注释,因此这不会影响#
用作extended_glob
通配符或在参数扩展中的使用。)或者(或另外),添加
函数内部。然后评论将起作用。