在旨在互動使用的函式中顯示使用註釋
我在 my 中定義了許多函式
.bashrc
,旨在在終端中以互動方式使用。我通常在它們之前加上描述其預期用途的評論:# Usage: foo [bar] # Foo's a bar into a baz foo() { ... }
如果瀏覽原始碼這很好,但最好
type
在終端中執行以快速提醒該函式的作用。然而,這(可以理解)不包括評論:$ type foo foo is a function foo () { ... }
這讓我想到“如果這些評論持續存在以便
type
可以顯示它們不是很好嗎?” 本著 Python 文件字元串的精神,我想出了這個:foo() { : Usage: foo [bar] : "Foo's a bar into a baz" ... } $ type foo foo is a function foo () { : Usage: foo [bar]; : "Foo's a bar into a baz"; ... }
現在該用法已包含在
type
輸出中!當然,正如您所看到的,引用成為一個容易出錯的問題,但它在工作時會提供更好的使用者體驗。所以我的問題是,這是一個糟糕的主意嗎?為 Bash 函式的使用者提供額外的上下文是否有更好的替代方案(如
man
/函式)?info
理想情況下,我仍然希望將使用說明放在函式定義附近,以便查看原始碼的人也能從中受益,但如果有“正確”的方法可以做到這一點,我願意接受替代方案。
編輯這些都是相當簡單的輔助樣式函式,我只是希望以互動方式獲得一些額外的上下文。當然,對於解析標誌的更複雜的腳本,我會添加一個
--help
選項,但對於這些腳本來說,向所有內容添加幫助標誌會有些負擔。也許這只是我應該接受的成本,但這種:
hack 似乎工作得相當好,而不會使原始碼更難閱讀我們的編輯。
我不認為只有一種好方法可以做到這一點。
-h
如果使用者提供或--help
作為選項,許多函式、腳本和其他執行檔會提供幫助消息:$ foo() { [[ "$1" =~ (-h|--help) ]] && { cat <<EOF Usage: foo [bar] Foo's a bar into a baz EOF return; } : ...other stuff... }
例如:
$ foo -h Usage: foo [bar] Foo's a bar into a baz $ foo --help Usage: foo [bar] Foo's a bar into a baz
我從來沒有完全說服自己冒險並使用
:
命令作為偽註釋。特別是,我一直擔心“評論”實際上是要評估的參數,並且可能會產生副作用(或只是破壞事物,例如錯誤的'
)。我仍然喜歡這個想法的簡單性,但從未發現這種權衡是合理的。我對通過標誌或類似方式提供使用文本的猶豫
--help
一直是隨之而來的麻煩。一旦你開始接受標誌,你很快就會進入成熟的參數解析,這通常(在 Bash 中)需要相當多的樣板文件。為了部分彌補這個差距,我將一個小實用程序組合在一起
getopts
,以減少這個樣板。它仍然佔用幾行程式碼,所以我不會在其他很小的函式中使用它,但它比getopts
直接使用要簡潔得多。這是帶有-h
標誌的範例用法(getopts
僅支持單字母選項):foo() { local _usage='foo [-a] [-b] [-f val] [-v val] [args ...]' eval "$(parse_opts 'f:v:abh')" if (( h )); then echo "Usage: $_usage" return 0 fi echo "f=$f v=$v a=$a b=$b -- $#: $*" }