了解定位命令正则表达式

Num*_*945 5 command-line locate

要将locate命令与正则表达式一起使用,我们是否需要将模式与传递--regex选项一起用引号括起来?如果是,那么以下是什么意思——

一)locate --regex file*?这里会发生正则表达式还是 shell globbing ?

乙)locate 'file*'?即使我们没有通过 locate 也会做正则表达式搜索--regex吗?

c) locate file* // 我知道 shell globbing 会发生

d) locate --regex 'file*'// 我知道正则表达式搜索将发生在数据库文件中

ber*_*sch 5

在 shell 提示符下键入命令。shell 处理您输入的内容,包括通配符、替换变量、替换$()等。处理完您输入的内容后,shell 将执行该命令。

如果字符串包含 shell 特有的字符(例如空格或星号),但您不希望 shell 处理它们,则需要引号。如果当前目录中没有匹配的文件,您将无需引用星号就可以离开,但无论如何引用它是一种很好的做法。

重要的是要了解该--regex选项对 shell 的操作没有影响。首先,shell 处理您键入的命令。locate得到那个处理的结果。

一)如果在当前目录中的文件相匹配的file*,shell将替换file*与这些文件的列表之前调用locate。如果没有匹配,外壳不会接触file*,并找到寻找被命名的文件filefileefileee等等。简而言之,shell 尝试通配符,然后locate如果 shell 的通配符产生正确的语法,则执行正则表达式搜索。

b) 引号告诉外壳不要管星号。locate将查找以file. 没有正则表达式搜索。

c) shell 尝试 globbing,如 a)。如果没有匹配项,locate将查找以file. 没有正则表达式搜索。

d) 外壳不考虑表达式。locate执行针对被命名文件正则表达式搜索和外观filefileefileee等等。

  • 没有 glob 匹配时的行为取决于 shell(和 shell 选项) - 例如,默认情况下,bash 会按照您的描述传递未扩展的 glob 模式(使用 `failglob` 和 `nullglob` 作为选项),而 zsh 只会通过使用选项 `nonomatch` 将未修改的模式转换为 `locate`。参见例如 [为什么 zsh 尝试扩展 * 而 bash 没有?](/sf/answers/1402619361/) (2认同)