‘*.txt’ 和 *.txt 有什麼區別?
我正在完成這裡找到的 git 教程: https ://try.github.io/levels/1/challenges/7
它說我必須在 *.txt 周圍加上單引號。我以前在使用 linux 時從未見過這種情況,但認為它很奇特。在使用 html 和 php 時,我還看到了單引號,以確保字元串按字面意思解釋,而不是使用特殊字元。
這在 shell 中與您提到的其他語法中的相同。單引號字元串將被視為“字元串文字”(可以這麼說)。
git add '*.txt'
和之間的區別在於git add *.txt
誰在將模式與文件名進行匹配。在 的情況下
git add '*.txt'
,git
正在進行模式匹配。由於 shell 不會擴展字元串字面量'*.txt'
,git add
因此將使用單個參數呼叫*.txt
. 然後對整個儲存庫中git
可用的文件名進行匹配(因為… )。git
在 的情況下
git add *.txt
,shell 執行文件名匹配並將匹配文件名列表從目前目錄傳遞到git add
. 請注意,如果沒有與給定模式匹配的名稱,shell 將(通常為1)將模式傳遞給git add
未擴展的模式。如果發生這種情況,結果將與引用模式相同。1 通常,但請參見例如 中的
failglob
shell 選項bash
。另請參閱對此答案的評論。當
git add
獲取文件名模式時,它不僅會添加目前目錄中匹配的文件,還會添加整個儲存庫中匹配的所有文件(即包括任何子目錄)。這就是為什麼右下角的文字說萬用字元:
我們需要引號,以便 Git 在我們的 shell 干擾它之前接收萬用字元。如果沒有引號,我們的 shell 將只在目前目錄中執行萬用字元搜尋。Git 將接收 shell 找到的文件列表而不是萬用字元,並且它無法將文件添加到 octofamily 目錄中。