在設計 CLI 時,是否有使用選項或子命令的偏好/經驗法則?
例如,要安裝一個軟體包,
pacman
將使用:
pacman -S <package>
While someone using
dnf
將鍵入:
dnf install <package>
While
pacman
uses the-S
option,dnf
uses the subcommandinstall
。其他一些例子是
nmcli
andtar
, withnmcli connection up <connection>
(uses subcommands) andtar -xzvf <file>
(uses options).各有什麼優缺點,還是只是個人喜好?
您所謂的“單詞”的更專業術語是“子命令”。將命令行界面設計為帶有許多子命令的命令是很常見的,每個子命令都有自己的一組選項。有時子命令有自己的子命令。git 就是這樣一個例子:
git remote add -f -t "$BRANCH_NAME" "$REMOTE_NAME" "git://example.com/repo"
將 CLI 拆分為子命令的一個原因是強調它可以執行多種不同的相關操作。
dnf
caninstall
pacakges,remove
packages,upgrade
packages,search
for packages, showinfo
about a package 等等。所有完全不同的動作。其中許多操作都有額外的旋鈕,你可以調整和選擇,你可以通過選項做出選擇。使用子命令的另一個原因是子命令為選項提供了命名空間:
--all
in意味著與indnf list --all
完全不同的東西--all``dnf search --all
將大型 CLI 拆分為子命令的另一個原因是文件。想像一下如果 git 沒有子命令。整個 git 手冊將是一個冗長的頁面,詳細說明 git 的每個選項以及它們之間的關係。另外:執行
git commit --help
- 您將看到特定於commit
子命令的幫助頁面。另外:安裝tldr並執行tldr git commit
- 你會得到一個特定於commit
子命令的備忘單。另一個考慮因素是,如果要允許組合它們啟用的操作模式,則不應使用子命令*。*您可以在單個命令呼叫中指定多個選項,但您只能指定一個子命令。