设计 CLI 时是否有使用选项或子命令的偏好/经验法则?

设计 CLI 时是否有使用选项或子命令的偏好/经验法则?

例如,要安装一个软件包,pacman可以使用:
pacman -S <package>
While 有人使用时dnf会键入:
dnf install <package>
While pacmanusing 该-S选项,dnf使用子命令install

其他一些示例包括nmcliand tar、 with nmcli connection up <connection>(使用子命令)和tar -xzvf <file>(使用选项)。

各有什么优缺点,还是只是个人喜好?

答案1

更专业的术语是“子命令”。将命令行界面设计为一个命令,其中包含许多子命令,每个子命令都有自己的一组选项,这是很常见的。有时子命令有自己的子命令。git 就是这样一个例子:

git remote add -f -t "$BRANCH_NAME" "$REMOTE_NAME" "git://example.com/repo"

将 CLI 拆分为子命令的原因之一是强调它可以执行多种不同的相关操作。dnf可以install包、remove包、upgrade包、search用于包、显示info包等。所有完全不同的操作。其中许多操作都有额外的旋钮,您可以调整并通过选项进行选择。

使用子命令的另一个原因是子命令为选项提供了命名空间:--allin与in 的dnf list --all含义完全不同--alldnf search --all

将大型 CLI 拆分为子命令的另一个原因是文档。想象一下如果 git 没有子命令会怎样。整个 git 手册将是一页详细介绍 git 的每个选项以及它们之间的关系的一页。另外:运行git commit --help- 您将看到特定于子命令的帮助页面commit。另:安装总览并运行tldr git commit- 您将获得特定于子命令的备忘单commit

另一项考虑是您应该不是如果您希望允许组合子命令所启用的操作模式,请使用子命令。您可以在单个命令调用中指定多个选项,但只能指定一个子命令。

相关内容