我正在使用 shdoc 为我的 bash 函数生成 markdown 文件;但是,我还想将相关的 bash 函数体 以及该函数体中的注释 附加到由
shdoc
生成的 markdown 文件中。如何打印 bash 函数体同时包括函数体中的注释?
作为一个简单的示例,请考虑名为
foo.sh
的文件中的以下函数
# @description A function that does something
foo() {
# oh wow, a comment
echo "something cool"
}
现在,如果我想获得函数体而不需要注释,我可以使用
declare -f
轻松完成此操作,如下所示,在名为 doc.sh
的文件中:
# assuming flat directory structure, load the function into this scope
. foo.sh
foo_doc=$(declare -f foo)
echo "$foo_doc"
但问题是
foo_doc
只有函数体,因为 echo "$foo_doc"
foo ()
{
echo "something cool"
}
根本没有评论。因此,如果我将此信息附加到由
shdoc
生成的 markdown 中,它就不是理想的源代码文档。
我认为一种方法是使用
awk
或 sed
来确定与感兴趣的函数对应的行(当然,bash 函数由 {
和 }
分隔),然后我可以使用 sed
仅获取此处完成的那些行。我计划尝试这种方法,但也许有一个更优雅的解决方案,这就是我问的原因。
这有点麻烦,但你可以使用冒号注释:
foo() {
: This is a comment
echo foo this bar
}
说明:bash 中的
:
是一个无操作命令。你可以向它传递任何你想要的参数,它会忽略它们。因此,从技术上讲,这个“注释”实际上是一个命令,它是函数体的一部分,不执行任何操作。不过,您必须小心,如果您的评论包含特殊字符,则必须引用它们。