和有什么区别*
git rm *.txt
和
git rm \*.txt
我试过不止一次,我觉得这两个是等价的!!
eqoofvh91#
对于git rm *.txt,*是一个shell通配符,并且在git进程启动之前被shell扩展。默认情况下,shell仅在单个目录中展开通配符。进程永远不会看到星号,只会得到扩展文件路径的列表。然而,git rm \*.txt阻止shell进行通配符扩展,并将文字参数“星号点txt”传递给git进程。这与写入git rm '*.txt'或git rm "*.txt"相同。Git本身将解释和扩展glob模式(通配符),但是一个星号可以跨越多个目录。因此,git rm \*.txt将删除当前目录 * 和任何子目录 * 中的 * 所有 * 文本文件。当子目录中有文本文件时,差别就变得很明显了:
*
git
git rm '*.txt'
git rm "*.txt"
touch 1.txt 2.txt mkdir a b c/d touch a/3.txt b/4.txt c/d/5.txt
1.txt
2.txt
git rm 1.txt 2.txt
3.txt
4.txt
5.txt
ghhkc1vu2#
git rm *.txt:当您运行此命令时,shell将扩展*.txt通配符,然后将其传递给git rm命令。shell在当前目录中查找与模式*.txt匹配的文件,并用匹配的文件名列表替换*.txt。因此,git rm会收到要删除的文件列表。此行为取决于您使用的shell(例如,Bash)。git rm \*.txt:在这种情况下,反斜杠\用作转义字符,以防止shell扩展通配符。反斜杠告诉shell从字面上解释星号 ,将其视为文件名的一部分而不是通配符。当git rm收到命令时,它会将\*.txt视为文件名,并试图删除一个名为“.txt”的文件。
*.txt
git rm
\*.txt
因此,关键的区别在于,git rm *.txt删除当前目录中所有扩展名为.txt的文件,而git rm \*.txt尝试删除一个名为“*.txt”的文件。
2条答案
按热度按时间eqoofvh91#
对于
git rm *.txt
,*
是一个shell通配符,并且在git
进程启动之前被shell扩展。默认情况下,shell仅在单个目录中展开通配符。进程永远不会看到星号,只会得到扩展文件路径的列表。然而,
git rm \*.txt
阻止shell进行通配符扩展,并将文字参数“星号点txt”传递给git
进程。这与写入git rm '*.txt'
或git rm "*.txt"
相同。Git本身将解释和扩展glob模式(通配符),但是一个星号可以跨越多个目录。因此,
git rm \*.txt
将删除当前目录 * 和任何子目录 * 中的 * 所有 * 文本文件。当子目录中有文本文件时,差别就变得很明显了:
git rm *.txt
将删除1.txt
和2.txt
,并且实际上从git
过程的观点来看,与git rm 1.txt 2.txt
是不可区分的。git rm \*.txt
将删除所有文本文件(1.txt
、2.txt
、3.txt
、4.txt
和5.txt
)。ghhkc1vu2#
git rm *.txt
:当您运行此命令时,shell将扩展*.txt
通配符,然后将其传递给git rm
命令。shell在当前目录中查找与模式*.txt
匹配的文件,并用匹配的文件名列表替换*.txt
。因此,git rm
会收到要删除的文件列表。此行为取决于您使用的shell(例如,Bash)。git rm \*.txt
:在这种情况下,反斜杠\用作转义字符,以防止shell扩展通配符。反斜杠告诉shell从字面上解释星号 ,将其视为文件名的一部分而不是通配符。当git rm收到命令时,它会将\*.txt
视为文件名,并试图删除一个名为“.txt”的文件。因此,关键的区别在于,
git rm *.txt
删除当前目录中所有扩展名为.txt的文件,而git rm \*.txt
尝试删除一个名为“*.txt”的文件。