grep
用单引号和双引号括起来的模式有什么区别吗?
grep "abc" file.txt
和
grep 'abc' file.txt
我在问,因为我无法自己测试所有可能的情况,而且我不想偶然发现我弄错的情况:)
grep
用单引号和双引号括起来的模式有什么区别吗?
grep "abc" file.txt
和
grep 'abc' file.txt
我在问,因为我无法自己测试所有可能的情况,而且我不想偶然发现我弄错的情况:)
如果您有特殊字符,我会看到不同之处:
前任 :
grep "foo$barbase" file.txt
shell 会尝试扩展变量$barbase
,这可能不是你想要做的。
相反,如果您键入
grep 'foo$barbase' file.txt
$bar
是从字面上理解的。
最后,默认情况下总是更喜欢单引号,它更强大。
在双引号中,以下字符具有特殊含义:'$'、'`'、'\',以及启用历史扩展时的'!'。
字符 '$' 和 '<code>' 在双引号中保留其特殊含义($ 表示变量和执行)。
特殊参数 '*' 和 '@' 在双引号中保留其特殊含义作为输入,当以 $ 开头时。
'$'、'`'、'"'、'\' 或换行符可以通过在它们前面加上反斜杠来转义。
反斜杠在后跟 '$'、'`'、'"'、'\' 或换行符时保留其特殊含义。反斜杠前面没有特殊含义的字符保持不变。
检查 shell 扩展也很有帮助:
https ://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html#Shell-Expansions