![用于描述 Linux 命令的语法或约定](https://linux22.com/image/213983/%E7%94%A8%E4%BA%8E%E6%8F%8F%E8%BF%B0%20Linux%20%E5%91%BD%E4%BB%A4%E7%9A%84%E8%AF%AD%E6%B3%95%E6%88%96%E7%BA%A6%E5%AE%9A.png)
如果您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
,这只是一个不同的字符,没什么大不了的),但从技术上讲,机制是不同的。由于这个空间,git
shell 预计会分成两个参数。--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) 的“模板目录”部分。)
如果使用消息的语法不清楚,则手册页应该是清楚的。