为什么“grep '.*[s]' file”有效而“grep .*[s] file”无效?

为什么“grep '.*[s]' file”有效而“grep .*[s] file”无效?

比较

grep ‘.*[s]’ 文件

grep .*[s] 文件

为什么需要引号才能使其正常工作?在第二种情况下,grep 似乎试图检查每个带有句点的文件。

答案1

参数周围的引号(单引号或双引号)会抑制全局扩展。

您的第一个示例将正则表达式作为参数传递给grep.您的第二个示例包含 shell 本身扩展的 glob 模式,将适合该模式的文件名作为参数传递给grep.

答案2

还比较:

echo '.*[s]' file

echo .*[s] file

这将输出命令所看到的参数。

在第一个示例中,您向grep命令传递了两个参数:模式和文件。

在你的第二个例子中将处理第一个参数并将其替换为以点开头并以“s”结尾的所有文件。因此,您的 grep 命令将获取多个参数,并且它将尝试在所有其他扩展文件名和显式指定的文件中查找第一个(扩展)文件名。

相关内容