Bash 脚本的“interactive-comments”选项用法

Bash 脚本的“interactive-comments”选项用法

我想知道是否可以关闭非交互式 bash 脚本中的注释功能。

使用 或 打开或关闭“interactive_comments”或“interactive-comments”对非交互式 shell 没有影响setshopt

为什么会发生这种情况?我错过了什么?

答案1

我只是希望使用此(交互式评论)选项获得交互式 shell。

阅读文档而不是猜测。

如果设置,则允许以 开头的单词#导致该单词以及该行上的所有剩余字符在交互式 shell 中被忽略

打开该选项不会使 shell 具有交互性。它控制#如果 shell 是交互式的,是否启动注释;如果 shell 不是交互式的,则它不起作用。

还,

默认情况下启用此选项。

所以开启没有任何效果。

此外,记录的方法是shopt -s interactive_comments打开和shopt -u interactive_comments关闭它。但是set -o interactive-commentsset +o interactive-comments是(我认为没有记录的)替代方案。


仅当将其作为交互式 shell 启动时,您才能获得交互式 shell。没有办法使非交互式 shell 变得交互式。 shell 是否是交互式的取决于它的命令行以及它是否在终端上运行:

  • 使用选项-i,bash 以交互方式启动。
  • 没有-i但有-c或有脚本文件名(bash -c 'some command'bash path/to/script),bash 以非交互方式启动。
  • 如果没有-i-c脚本文件名,如果 bash 的标准输入和标准错误都是终端,则 bash 以交互方式启动,否则以非交互方式启动。

无论选项的状态如何interactive_comments,脚本文件和-c脚本中的注释始终会被识别。#在单词开头不开始注释的唯一情况是 shell 是交互式的,该interactive_comments选项已关闭,并且它正在从标准输入读取。

尝试这个script.sh

# a comment
shopt interactive_comments
set +o interactive-comments
shopt interactive_comments
# another comment

执行记录:

bash-5.0$ # a comment
bash-5.0$ shopt interactive_comments
interactive_comments    on
bash-5.0$ set +o interactive-comments
bash-5.0$ shopt interactive_comments
interactive_comments    off
bash-5.0$ # another comment
bash: #: command not found
bash-5.0$ exit

相关内容