bash中#:( hashtag / pound冒号)的目的是什么?

时间:2016-08-16 14:54:22

标签: bash comments sh hashtag

我最近看的是Homebrew源代码。由于它是一种流行的工具,因此代码可能相对干净。我注意到他们使用#:评论样式(例如:update.sh)。我还没有在其他任何地方看到过(而且很难找到符号,所以我找不到它的任何提及)。这是一个公认的惯例吗?它有特殊意义吗?

1 个答案:

答案 0 :(得分:1)

它看起来是某种联机帮助页面的文档片段:它以标准的手册页样式编写,并记录下面的脚本。这在Library/Homebrew/cmd/vendor-install.sh中更为明显,其中可以找到使用@hide_from_man_page标记的类似评论:

#: @hide_from_man_page
#:  * `vendor-install` [<target>]:
#:     Install vendor version of Homebrew dependencies.

因此,据推测,所有未经注释的片段都包含在联机帮助页中。

你选择了一个不幸的例子,因为update被认为是一个&#34;必要的命令&#34;因此记录在联机帮助页的单独部分中。我们选择一个非必要的命令,例如style,您可以在Library/Homebrew/cmd/style.rb中找到它:

#:  * `style` [`--fix`] [`--display-cop-names`] [<formulae>|<files>]:
#:    Check formulae or files for conformance to Homebrew style guidelines.
#:
#:    <formulae> is a list of formula names.
#:
#:    <files> is a list of file names.
#:
#:    <formulae> and <files> may not be combined. If both are omitted, style will run
#:    style checks on the whole Homebrew `Library`, including core code and all
#:    formulae.
#:
#:    If `--fix` is passed and `HOMEBREW_DEVELOPER` is set, style violations
#:    will be automatically fixed using RuboCop's `--auto-correct` feature.
#:
#:    If `--display-cop-names` is passed, the RuboCop cop name for each violation
#:    is included in the output.
#:
#:    Exits with a non-zero status if any style violations are found.

现在,当您查看Library/Homebrew/manpages/brew.1.md.erb时,您会发现它们是确实联机帮助页片段,这些片段会自动包含在主brew.1联机帮助页中:

# To make changes to this man page:
#
# - For changes to a specific command (appears in the `COMMANDS` section):
#   - Edit the top comment in `Library/Homebrew/cmd/<command>.{rb,sh}`.
#   - Make sure to use the line prefix `#:` for the comments to be recognized as
#     documentation. If in doubt, compare with already documented commands.
# - For other changes: Edit this file.
#
# When done, regenerate the man page and its HTML version by running `brew man`.

here's the line where they get included into the manpage

<%= commands.join("\n") %>

您可以在share/man/man1/brew.1中看到生成的输出:

.TP
\fBstyle\fR [\fB\-\-fix\fR] [\fB\-\-display\-cop\-names\fR] [\fIformulae\fR|\fIfiles\fR]
Check formulae or files for conformance to Homebrew style guidelines\.
.
.IP
\fIformulae\fR is a list of formula names\.
.
.IP
\fIfiles\fR is a list of file names\.
.
.IP
\fIformulae\fR and \fIfiles\fR may not be combined\. If both are omitted, style will run style checks on the whole Homebrew \fBLibrary\fR, including core code and all formulae\.
.
.IP
If \fB\-\-fix\fR is passed and \fBHOMEBREW_DEVELOPER\fR is set, style violations will be automatically fixed using RuboCop\'s \fB\-\-auto\-correct\fR feature\.
.
.IP
If \fB\-\-display\-cop\-names\fR is passed, the RuboCop cop name for each violation is included in the output\.
.
.IP
Exits with a non\-zero status if any style violations are found\.
.

share/doc/homebrew/brew.1.html

<dt><code>style</code> [<code>--fix</code>] [<code>--display-cop-names</code>] [<var>formulae</var>|<var>files</var>]</dt><dd><p>Check formulae or files for conformance to Homebrew style guidelines.</p>

<p><var>formulae</var> is a list of formula names.</p>

<p><var>files</var> is a list of file names.</p>

<p><var>formulae</var> and <var>files</var> may not be combined. If both are omitted, style will run
style checks on the whole Homebrew <code>Library</code>, including core code and all
formulae.</p>

<p>If <code>--fix</code> is passed and <code>HOMEBREW_DEVELOPER</code> is set, style violations
will be automatically fixed using RuboCop's <code>--auto-correct</code> feature.</p>

<p>If <code>--display-cop-names</code> is passed, the RuboCop cop name for each violation
is included in the output.</p>

我不知道这是否是shell脚本中公认的惯例,但类似的约定用于各种语言和/或文档工具,例如: JavaDoc(/**),Doxygen(/**/*!/////!),JsDoc(/**)或C♯({ {1}})。