Bash
外殼擴展未發生
為什麼這兩個命令是等效的(或者它似乎基於我得到的結果)?我認為第一個命令不起作用,因為
*
它將被視為 glob 運算符,但它被grep
很好地傳遞並解釋為正則表達式模式。git diff master | grep \\+.*TODO git diff master | grep \\+.\*TODO
只有在目前目錄中有匹配的文件時才會擴展文件名 glob - 否則(除非任何
nullglob
或failglob
shell 選項)它將按原樣傳遞。所以:$ echo \\+.*TODO \+.*TODO $ printf '+foo\n+TODO\n+bar' | grep \\+.*TODO +TODO
但
$ touch '\+.abcTODO' $ echo \\+.*TODO \+.abcTODO $ printf '+foo\n+TODO\n+bar' | grep \\+.*TODO $ printf '+foo\n+TODO\n+bar' | grep \\+.\*TODO +TODO