我正在阅读Git Reference中的Git Add文档:
添加
*.txt
目录及其子目录下所有Documentation
个文件的内容:$ git add Documentation/\*.txt
请注意,在此示例中,引用了星号
*
; 这让命令包含来自子目录的文件Documentation/
目录。
我认为反斜杠 是一个转义前缀,但解释说“*是从shell中引用的”,有人可以给我更多关于反斜杠用法的说明吗?
答案 0 :(得分:2)
在Bash手册中,3.5.8 Filename Expansion和3.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文件夹中有太多文件,则前一个选项可能会失败,但后一个选项可能会有效。