當我在cp中使用*時,我認爲它遵循與regex相同的規則。 所以"cp temp/* test/"
應該複製一切,但是,當臨時文件夾爲空時,它會拋出異常,說它無法找到文件或目錄,這表明*無法匹配「無」。通配符在Linux cp
然後,我創建下一個臨時文件test.txt做:
cp temp/test.txt* test/
它的工作原理,這表明*確實符合「無」。
我弄不清楚的行爲。任何人都可以解釋一下嗎?
感謝
當我在cp中使用*時,我認爲它遵循與regex相同的規則。 所以"cp temp/* test/"
應該複製一切,但是,當臨時文件夾爲空時,它會拋出異常,說它無法找到文件或目錄,這表明*無法匹配「無」。通配符在Linux cp
然後,我創建下一個臨時文件test.txt做:
cp temp/test.txt* test/
它的工作原理,這表明*確實符合「無」。
我弄不清楚的行爲。任何人都可以解釋一下嗎?
感謝
發生了什麼事是*
擴張是由你的shell(bash
可能)來完成。圖案temp/testfile.txt*
確實匹配temp/testfile.txt
(*
零個或多個字符匹配),因此bash中通過了到cp
。
然而,bash
設置,默認情況下,通過通配符原樣到應用程序,如果它不匹配任何東西(有叫nullglob
把這種非直觀的行爲關閉的選項)。所以它通過temp/*
字面上的cp,它抱怨說它不存在。
殼做的擴展,所以它不是cp
具體。
如果沒有發現匹配,有沒有替代,原始的字符串(temp/*
)被保留並傳遞給應用程序。當然cp
找不到那個名字的文件。
# echo nosuchfile*
nosuchfile*
一些澄清爲 「無」:
temp/*
意味着temp
目錄條目(文件/目錄/ ...),但沒有發現任何文件,所以失敗了。
temp/test.txt*
表示在temp
目錄中以test.txt
開頭的條目。
通配符globbing
是不一樣的正則表達式,完全用自己的規則。
不同shell有不同的規則......你讓想看看Wikipdia得到一個概述。
感謝您的幫助解釋。我仍然想知道爲什麼「temp temp/test /」在temp內沒有任何內容時工作?謝謝 – Frank
你可以仔細檢查一下嗎?當我嘗試'cp temp /。測試/'我得到'cp:temp /。是一個目錄(不復制)。(Mac OS)或'cp:省略目錄\'temp /。''(Linux)。 –