Num*_*945 3 command-line bash locate
从定位手册页:
If --regex is not specified, PATTERNs can contain globbing characters. If any PATTERN contains no globbing characters, locate behaves as if the pattern were *PATTERN*.
Run Code Online (Sandbox Code Playgroud)
现在,查看这些命令的输出:
test@ubuntu:~$ ls
Desktop Documents Downloads Firefox_wallpaper.png Music Pictures Public Templates Videos
test@ubuntu:~$
test@ubuntu:~$
test@ubuntu:~$ locate '/bin/bash*'
test@ubuntu:~$
test@ubuntu:~$
test@ubuntu:~$ locate /bin/bash*
/snap/core18/1880/bin/bash
/snap/core18/1880/usr/bin/bashbug
/snap/core18/1944/bin/bash
/snap/core18/1944/usr/bin/bashbug
/usr/bin/bash
/usr/bin/bashbug
Run Code Online (Sandbox Code Playgroud)
如果您看到我当前的工作目录没有完整路径名以/bin/bash
. 因此,我们不应该从locate /bin/bash*
. 为什么 ?根据shell 的 globbing 功能,由于我当前的工作目录中没有这样的文件/目录,因此*
不会按原样扩展和传递。因此,它应该等同于 using locate '/bin/bash*'
(这是我们上面运行的第二个命令)。因为,这没有收到任何输出,因此这locate /bin/bash*
也不应该给出输出?
如果您看到我当前的工作目录没有完整路径名以 /bin/bash 开头的文件/目录。因此,我们不应该从 locate /bin/bash* 接收任何输出
不,这不是 shell globbing 的工作方式 -/bin/bash*
匹配包括路径,所以鉴于它找到了一个匹配(即/bin/bash
),这就是locate
将接收的参数。您可以通过使用 shell 的-x
调试参数集运行命令来验证这一点:
$ set -x
$
$ locate /bin/bash*
+ locate /bin/bash
/bin/bash
/snap/core/10577/bin/bash
/snap/core/10577/usr/bin/bashbug
/snap/core/10583/bin/bash
/snap/core/10583/usr/bin/bashbug
/snap/core18/1932/bin/bash
/snap/core18/1932/usr/bin/bashbug
/snap/core18/1944/bin/bash
/snap/core18/1944/usr/bin/bashbug
/usr/bin/bashbug
Run Code Online (Sandbox Code Playgroud)
由于(扩展的)模式不包含通配符,它等效于*/bin/bash*
.
更有趣的问题是为什么它没有定位/bin/bash
自己,因为 shell 显然可以定位 - 我认为这是因为/bin
它/usr/bin
在较新版本的 Ubuntuupdatedb
上被符号链接- 并且不记录符号链接。
归档时间: |
|
查看次数: |
280 次 |
最近记录: |