Bash

外殼擴展未發生

  • August 16, 2017

為什麼這兩個命令是等效的(或者它似乎基於我得到的結果)?我認為第一個命令不起作用,因為*它將被視為 glob 運算符,但它被grep很好地傳遞並解釋為正則表達式模式。

git diff master | grep \\+.*TODO
git diff master | grep \\+.\*TODO

只有在目前目錄中有匹配的文件時才會擴展文件名 glob - 否則(除非任何nullglobfailglobshell 選項)它將按原樣傳遞。所以:

$ 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

引用自:https://unix.stackexchange.com/questions/386304