shell git rm *.txt和git rm \*.txt之间的区别

ki1q1bka  于 2023-05-18  发布在  Shell
关注(0)|答案(2)|浏览(266)

有什么区别*

git rm *.txt

git rm \*.txt

我试过不止一次,我觉得这两个是等价的!!

eqoofvh9

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将删除当前目录 * 和任何子目录 * 中的 * 所有 * 文本文件。
当子目录中有文本文件时,差别就变得很明显了:

touch 1.txt 2.txt
mkdir a b c/d
touch a/3.txt b/4.txt c/d/5.txt
  • git rm *.txt将删除1.txt2.txt,并且实际上从git过程的观点来看,与git rm 1.txt 2.txt是不可区分的。
  • git rm \*.txt将删除所有文本文件(1.txt2.txt3.txt4.txt5.txt)。
ghhkc1vu

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”的文件。

相关问题