反斜杠在这个Git Add Example中意味着什么

时间:2017-03-22 15:29:22

标签: git shell

我正在阅读Git Reference中的Git Add文档:

  

添加*.txt目录及其子目录下所有Documentation个文件的内容:

$ git add Documentation/\*.txt
     

请注意,在此示例中,引用了星号*;   这让命令包含来自子目录的文件   Documentation/目录。

我认为反斜杠 是一个转义前缀,但解释说“*是从shell中引用的”,有人可以给我更多关于反斜杠用法的说明吗?

2 个答案:

答案 0 :(得分:2)

在Bash手册中,3.5.8 Filename Expansion3.5.8.1 Pattern Matching中描述了确切的行为。 (请注意,bash非常复杂,它会在很长的一系列步骤中处理命令行参数。)

"引用"通常用来说"删除"中的特殊含义。命令行git add Documentation/*.txt在shell中调用特殊行为:bash用一些文件名替换参数。如果您改为编写git add Documentation/\*.txt,则引用 *:此过程不会发生,并且参数将不加改变地传递给程序。

编写此命令的另一种方法是git add 'Documentation/*.txt',这可能更为明显,为什么它通常被称为"引用"。使用反斜杠(或其他)字符来改变后续字符的含义有时称为转义。 (这可能源于使用ascii字符27和/或Esc键。)

有时两种方式:\*可能会导致*被视为普通字符,但\n可能会为普通的n分配特殊含义。这取决于具体的计划。

答案 1 :(得分:1)

如果你写git add Documentation/*.txt,那么shell会扩展星号(*),如Josh Lee's answer中所述。如果你写git add Documentation/\*.txt,则通过git扩展星号。结果通常是相同的,但是有一些边缘情况。例如,如果Documentation文件夹中有太多文件,则前一个选项可能会失败,但后一个选项可能会有效。