find 实用程序无法识别括号表示法

gon*_*aao 3 shell find quoting regular-expression

我在当前文件夹中有两个文件:

submitWeb.m
submit.m

以下find不显示这两个文件:

find . -regex .*submit\(Web\)?\.m
Run Code Online (Sandbox Code Playgroud)

但是上面的正则表达式在 emacs 缓冲区中工作正常,即使用isearch-forward-regexp.

默认regextypefindIS emacs

但似乎将其find视为\(文件名中的左括号,这与 emacs 正则表达式语法不同。

那么这是错误还是我对find联机帮助页的误解?

gon*_*aao 5

似乎问题是\(由外壳首先解释的。

例如,您在当前目录中有一个名为:

foo(.test

然后

ls foo\(.text
Run Code Online (Sandbox Code Playgroud)

ls "foo(.text"
Run Code Online (Sandbox Code Playgroud)

两者都工作。

因此,以下工作:

find . -regex ".*submit\(Web\)?\.m"
Run Code Online (Sandbox Code Playgroud)

编辑

单引号也适用于此。

单引号和双引号的区别,见这篇文章:bash中的单引号与双引号

  • 一个好的经验法则是用单引号引用所有内容,除非您特别需要双引号的替换行为。 (2认同)