命令行:参数,选项和参数

时间:2018-11-29 09:23:00

标签: maven command-line command-line-interface

我试图更好地了解命令行的工作方式

在参数,选项和子命令方面我有点困惑

让我们想象一下maven(一种Java构建工具):

$file = "\\xxxxx\xxxxxx\xxxxxxx\test.log"
try {
    [IO.File]::OpenWrite($file).Close();
    exit 0
} catch {
    exit 999
}
$exit | Out-File -FilePath "C:\stuff\PSOutput.txt"

mvn是命令行程序。但是什么是“干净”和“安装”?它们是参数还是子命令?

让我们想象另一个例子:

mvn clean install

prog是命令行程序。 -a是一个选项,arg是一个参数。您怎么知道arg是属于'prog'的参数还是属于选项'-a'的参数?

谢谢

1 个答案:

答案 0 :(得分:1)

  

它们是参数还是子命令

这取决于。如果程序的参数具有层次结构,则它们将是子命令,例如:

docker image ls

docker程序有一个命令/命令组image和一个子命令ls。)

如果程序采用参数来表示串行执行,则它们将只是参数,例如:

mvn clean install

mvn程序将首先执行clean生命周期,然后在install生命周期中执行直至default阶段,请参见here。)

我看到参数通常具有有意义的顺序,例如在Maven中,而选项通常可以放置在任何地方。对于Maven,有类似-D...-e-U之类的参数(要提到一些常见的参数)。他们可以去任何地方:

mvn -e clean -DskipTests install -Dcheckstyle.skip=true ... et cetera

对于其他程序,选项的顺序可能很重要,例如find has "tests"。它们看起来像选项(从某种意义上来说,它们带有-option表示法),尽管有人可以说它们是参数。换句话说,取决于

  

prog -a arg   您怎么知道arg是属于'prog'的参数还是属于选项'-a'的参数

同样,这取决于 a选项的定义。如果不带参数,则有时称为 flag 。如果确实接受参数,则该参数是选项说明的一部分,并且程序的命令行解析器可以解决这个问题。

我个人从使用Click构建命令行工具中学到了很多东西。 (绝不是专家。)