Linux
何時以及為什麼需要引用星號
我認為我從來沒有完全理解過何時以及為什麼需要在 Linux/Bash 中雙引號的規則(我不確定這個問題的域是 Linux、Bash 還是其他東西)。我認為
*
匹配任意數量的字元(包括沒有),這似乎與維基百科的文章一致。但是當我嘗試*
如下使用萬用字元時,我得到了我不明白的結果:>pwd /home/user/foo/foo/test >tree . ├─ main.opp └─ test └─ test.opp >find ../ -name *.opp ../test/test.opp >find ../ -name "*.opp" ../main.opp ../test/test.opp >cd .. >pwd /home/user/foo/foo >find . -name *.opp ./main.opp >find . -name "*.opp" ./main.opp ./test/test.opp
為什麼
find
使用非雙引號*.opp
參數只返回一次命中,而雙引號返回預期的兩次命中?
這取決於何時評估擴展。如果你不引用星號,bash 首先評估它。相當於呼叫
find . -name main.opp
. 如果您引用星號,它將按原樣傳遞,以查找哪個以您期望的方式使用它。
如果沒有引號,如果目前目錄中有任何匹配的文件,bash 將擴展星號。這裡我
echo
用來調試擴展。~/foo/foo/test$ echo find ../ -name *.oop find ../ -name test.oop ~/foo/foo/test$ cd .. ~/foo/foo$ echo find . -name *.oop find . -name main.oop
如果您在目前目錄中搜尋不匹配的內容,它將不會展開:
~/foo/foo$ echo find . -name test.* find . -name test.* ~/foo/foo$ find . -name test.* ./test/test.oop