相关疑难解决方法(0)

通配符是 shell 的一个特性吗?

我读了很多的问题和答案像这个这个

我知道通配符在运行命令之前被 shell 扩展,它们是 shell 的一个特性。通配符也适用于那些可以接受许多参数的命令。在find . -name *.rb 我们若在当前目录多个文件find会给我们一个错误,因为发现不能接受多个参数,解决这个是方法:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Run Code Online (Sandbox Code Playgroud)

我们避开星号并防止 shell 扩展,但通配符是 shell 的一个特性;当我们转义 asterisk shell 不知道它的含义时,它应该找到一个名为 的文件*.rb,那么在这种情况下星号是如何扩展的?

bash find wildcards

12
推荐指数
1
解决办法
2061
查看次数

定位命令和 shell 的通配符

定位手册页

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*也不应该给出输出?

command-line bash locate

3
推荐指数
1
解决办法
280
查看次数

标签 统计

bash ×2

command-line ×1

find ×1

locate ×1

wildcards ×1