在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 中调用它们。谢谢你!
答案1
默认情况下,zsh 仅识别脚本中的注释,而不能识别交互运行时的注释。这应该适用于源脚本,但在最近的版本中(我在 5.8 中重现了此行为,但 5.4.2 可以很好地接受您的代码),这也适用于加载后解析的某些代码,例如命令替换中的代码。这可能是一个错误。
放setopt interactive_comments
在.zshrc
交互式运行时支持评论。这实际上并没有什么缺点:这意味着您必须#
在单词的开头引用,但#
很少出现在命令行上单词的开头。 (在一个单词中不会开始注释,因此这不会影响用作通配符或在参数扩展中#
的使用。)#
extended_glob
或者(或另外),添加
setopt local_options interactive_comments
函数内部。然后评论就起作用了。