要将locate
命令与正则表达式一起使用,我们是否需要将模式括在引号中并传递--regex
选项?如果是,那么以下是什么意思 -
A)locate --regex file*
?这里会发生正则表达式还是 shell 通配符?
b) locate 'file*'
?即使我们没有通过,也会定位进行正则表达式搜索吗--regex
?
c) locate file*
// 我知道会发生 shell 通配符
d) locate --regex 'file*'
// 我知道正则表达式搜索将在数据库文件中进行
答案1
您可以在 shell 提示符下键入命令。 shell 处理您输入的内容,包括通配符、替换变量、替换$()
等。处理完您输入的内容后,shell 会执行该命令。
如果字符串包含 shell 特有的字符(例如空格或星号),但您不希望 shell 处理它们,则需要使用引号。如果当前目录中没有匹配的文件,您将无需引用星号即可逃脱,但无论如何引用它都是一个好习惯。
重要的是要了解该--regex
选项对 shell 的操作没有影响。首先,shell 处理您键入的命令。locate
得到该处理的结果。
a) 如果当前目录中有匹配的文件file*
,shell将替换file*
为这些文件的列表打电话之前locate
。如果没有匹配项,shell 将不会接触file*
,并会查找名为file
、filee
等的文件fileee
。简而言之,shell 尝试进行通配,locate
如果 shell 的通配产生正确的语法,则执行正则表达式搜索。
b) 引号告诉 shell 保留星号。locate
将查找以 . 开头的文件file
。没有正则表达式搜索。
c) shell 尝试像 a) 中那样进行通配。如果没有匹配,locate
将查找以file
.没有正则表达式搜索。
d) shell 不考虑表达式。locate
将执行正则表达式搜索并查找名为file
、filee
等的文件fileee
。