用于描述 Linux 命令的语法或约定

用于描述 Linux 命令的语法或约定

如果您git clone --help在命令行中应用,您的结果将包括类似以下内容:

git clone [--template=<template_directory>]
             [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
             [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
             [--dissociate] [--separate-git-dir <git dir>]
             [--depth <depth>] [--[no-]single-branch] [--no-tags]
             [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
             [--jobs <n>] [--] <repository> [<directory>]

请任何人解释一下某些选项中使用的等号的含义,例如--template.

我在谷歌上进行了广泛的搜索并发现,但他们都没有解释我想要什么。

请注意,这个问题不是关于 Git,而是关于用于描述 linux 命令的语法或约定。

答案1

--template=<template_directory>角色中=文字。无论您替换什么,<template_directory>都将被附加到后面--template=,并且它们一起形成一个参数,传递到git参数数组中。=对于 shell 来说并不特殊,它可以在 shell 中被转义或引用。该论证可以作为一个整体来引用。

为了进行比较,其中--depth <depth>有一个空格字符。您可能会从字面上理解该空格=(即对自己说:我需要=after--template但我需要 after 后的空格--depth,这只是一个不同的字符,没什么大不了的),但从技术上讲,机制是不同的。由于这个空间,gitshell 预计会分成两个参数。--depth <depth>在 shell 中输入时使用一个或多个空格(或制表符)并不重要。重要的是选项--depth,无论您替换什么,<depth>都应该是传递到git参数数组中的两个参数。因此,空格不得在 shell 中转义或引用。

当没有 shell 时(即当你制作一个显式的大批或类似的参数execve(2)),您应该--template=<template_directory>作为一个参数传递,但--depth+<depth>作为两个参数传递。

为什么git对不同的选项使用不同的约定是另一回事。在这种特定情况下(即 ),差异可能有也可能没有某些理由git

一般来说,实用程序可以用自己的方式解释其参数。即使它遵循 的一项约定--foo,从技术角度来看,它也没有义务与 遵守相同的约定--bar

答案2

这种类型的使用消息几乎没有正式的语法,但通常遵循许多约定。

尖括号语法<thing>通常指示您提供的某些参数。该--template=部分几乎是字面意思,按原样键入。=描述的“语法”并不特殊,它是实际命令语法的一部分。

如果您想了解更多信息,您应该查看手册页。 man git-clone说:

--template=<模板目录>

指定将使用模板的目录; (请参阅 git-init(1) 的“模板目录”部分。)

如果使用消息的语法不清楚,则手册页应该是清楚的。

相关内容