5

grep用单引号和双引号括起来的模式有什么区别吗?

grep "abc" file.txt

grep 'abc' file.txt

我在问,因为我无法自己测试所有可能的情况,而且我不想偶然发现我弄错的情况:)

4

2 回答 2

5

如果您有特殊字符,我会看到不同之处:

前任 :

grep "foo$barbase" file.txt

shell 会尝试扩展变量$barbase,这可能不是你想要做的。

相反,如果您键入

grep 'foo$barbase' file.txt

$bar是从字面上理解的。

最后,默认情况下总是更喜欢单引号,它更强大。

于 2012-11-08T05:16:59.200 回答
1
  • 在双引号中,以下字符具有特殊含义:'$'、'`'、'\',以及启用历史扩展时的'!'。

    字符 '$' 和 '<code>' 在双引号中保留其特殊含义($ 表示变量和执行)。

    特殊参数 '*' 和 '@' 在双引号中保留其特殊含义作为输入,当以 $ 开头时。

    '$'、'`'、'"'、'\' 或换行符可以通过在它们前面加上反斜杠来转义。

    反斜杠在后跟 '$'、'`'、'"'、'\' 或换行符时保留其特殊含义。反斜杠前面没有特殊含义的字符保持不变。

    检查 shell 扩展也很有帮助:
    https ://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html#Shell-Expansions

  • 单引号忽略 shell 扩展。
于 2016-01-29T23:40:34.793 回答