쉘 기능에 주석을 추가하는 데 대한 훌륭하고 완전한 안내서는 다음과 같습니다.함수 헤더 앞에 배치하세요.. 가능한 한 이 지침을 따르려고 노력했지만 이러한 규칙으로 인해 함수의 주석을 읽기가 어려워졌습니다. 예를 들어 내 함수의 주석에 액세스할 수 없습니다.
#######################################
# 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
한 가지 접근 방식은 LISP 프로그래머가 사용하고 Python과 같은 언어에서 채택한 접근 방식을 취하고 주석 구문을 사용하는 대신 독스트링을 사용하는 것입니다.(독스트링). which/whence/type을 사용할 때 이 내용을 볼 수 있습니다. LISP에서는 문자열이 스스로 평가되고 무시됩니다. 셸의 경우 이를 할당해야 합니다(예: _doc).
gmt(){
_doc="Show date in gmt"
date -u "$@"
}
두 번째 방법은 함수가 매개변수를 허용한다는 점에 유의하는 것입니다. 첫 번째 인수를 사용하여 함수를 호출하는 경우 --help
도움이 되는 규칙을 설정할 수 있습니다.크쉬 93getopts
이러한 항목을 쉽게 생성할 수 있는 확장 파서가 있습니다 .예를 들어 이env
주문하다.
답변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에서) 함수 코드의 미리 컴파일된 형태의 쉘 구문 렌더링을 보여줍니다.
컴파일된 코드의 일부가 아니기 때문에(셸뿐만 아니라 모든 언어에서) 주석을 찾을 수 없습니다. 표시되는 코드는 함수를 정의하는 코드와 다를 수 있으며, 별칭이 확장되고, 들여쓰기가 달라지며, 줄이 계속 제거되고, 짧은 형식이 긴 형식으로 변경되는 등의 현상을 확인할 수 있습니다.
여기서는 작성자가 작성한 실제 소스를 보고 싶은 것 같습니다. .NET 대신 파일 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