![将函数注释放在函数头之前时不会打印出来](https://linux22.com/image/221837/%E5%B0%86%E5%87%BD%E6%95%B0%E6%B3%A8%E9%87%8A%E6%94%BE%E5%9C%A8%E5%87%BD%E6%95%B0%E5%A4%B4%E4%B9%8B%E5%89%8D%E6%97%B6%E4%B8%8D%E4%BC%9A%E6%89%93%E5%8D%B0%E5%87%BA%E6%9D%A5.png)
注释 shell 函数的一个良好且完善的指南是将其放在函数头之前。我试图尽可能地遵循这些准则,但这种约定使得阅读函数的注释变得困难。例如,我无权访问我的函数的注释
#######################################
# init the current directory with the required files to work with latex in Vscode's extension LaTeX workshop
# Arguments:
# $1 -> Main .tex file. Optional. Default to "main.tex"
#######################################
initlatex () {
curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_default_preamble.tex > default_preamble.tex
grep -q "\\input{default_preamble.tex}" ${1:-main.tex} || sed -i '2i\\\input{default_preamble.tex}\n' ${1:-main.tex}
curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/Makefile > Makefile
[[ ! -d .vscode ]] && mkdir --parents --verbose .vscode
curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_vscode_makefile.json > .vscode/settings.json
}
直接在终端上使用以下which
命令:
❯ which initlatex
initlatex () {
curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_default_preamble.tex > default_preamble.tex
grep -q "\\input{default_preamble.tex}" ${1:-main.tex} || sed -i '2i\\\input{default_preamble.tex}\n' ${1:-main.tex}
curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/Makefile > Makefile
[[ ! -d .vscode ]] && mkdir --parents --verbose --parents --verbose .vscode
curl https://gist.githubusercontent.com/tapyu/886dc95fc19c4250fb38581ccc58bed8/raw/0eeaa62d401659fe1c57602ec8f17608775d5338/_vscode_makefile.json > .vscode/settings.json
}
是否有另一个命令可以在不破坏此最佳实践的情况下打印出函数的注释?
答案1
答案2
我会将文档放入一个通过严格的编码约定与函数名称相关的变量中。例如,哦,名称完全相同,因为变量和函数位于不同的命名空间中:
initlatex='
#######################################
# init the current directory with the required
# files to work with latex in Vscode'\''s extension LaTeX workshop
# Arguments:
# $1 -> Main .tex file. Optional. Default to "main.tex"
#######################################
'
initlatex () {
curl ...
}
现在如果我们知道函数的名称,我们就可以获得它的文档:
$ echo "$initlatex"
#######################################
# init the current directory with the required
# files to work with latex in Vscode's extension LaTeX workshop
# Arguments:
# $1 -> Main .tex file. Optional. Default to "main.tex"
#######################################
答案3
我以相同的方式进行编码,并在函数上方添加了详细注释,但我在函数本身中添加了一行:
function dewpoint() { # Calculate dewpoint(C) based on Temperature(C) and Humidity(%)
然后我有一个小脚本llfunctions
显示一行信息
dewpoint() Calculate dewpoint(C) based on Temperature(C) and Humidity(%)
llfunctions
#!/usr/bin/env bash
source ~/bin/functions-prt
list=(~/bin/functions-*)
[[ $1 ]] && list=("$@")
for fn in "${list[@]}"; do
name=$(basename "$fn")
prt-underline "$name"
prt ""
awk '/^function/ { printf "%25s", $2; $1=$2=$3=$4=""; $0=$0; print $0 }' "$fn"
prt ""
done
答案4
which myfunction
(在您似乎正在使用的 zsh 中)向您展示了函数代码的预编译形式的 shell 语法呈现。
您不会在那里找到任何注释,因为它们不是编译代码的一部分(在任何语言中,而不仅仅是 shell)。您看到的代码可能与定义函数的代码不同,您会注意到别名已扩展,缩进将不同,行继续被删除,短格式更改为长格式等。
在这里,您似乎想查看作者编写的实际来源。就像您希望查看文件file.java
中 java 函数的源代码file.class
而不是file.class
.
在 中zsh
,对于那些已经在文件中定义的函数,可以通过以下方式查看相应的文件:
view $functions_source[myfunction]
(或您最喜欢的查看器/编辑器)假设该文件仍然存在。您还将受益于语法突出显示和查看器/编辑器的其他好处。
type myfunction
还告诉您函数定义是从哪里读取的:
$ type ls _ls
ls is a shell function from /home/chazelas/.zshrc
_ls is a shell function from /usr/share/zsh/functions/Completion/Unix/_ls