双引号内的通配符是否通配符?

Mat*_*att 8 bash globbing

在“标准 BASH”上,双引号内是否有通配符?例如:

$ touch abc
$ ls "*abc*"
Run Code Online (Sandbox Code Playgroud)

会,还是不会在 bash 上工作?

有人告诉我 Ubuntu 附带了一个不符合 POSIX 或 BASH 的 bash 变体。真的吗?

hmo*_*liu 7

简短回答:没有

man bash 的长回答:

双引号中的字符会保留引号内所有字符的字面值,但 $、`、\ 除外

所以:

~$ touch sas
~$ ls *a*
sas
~$ ls "*a*"
ls: cannot access *a*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

当然,在谈论双引号和星号时,还有另一个例外:参数扩展(即:“$*”)……但那是另一段历史了

对于第二个问题:你问的是破折号吗?dash 是一个轻量级的脚本 shell。在 debian 和 ubuntu 中,每个扩展(基于 debian),别名为 sh;与 bash 相比,它的主要优势在于它的速度,因此它默认用于系统脚本;然而,默认情况下 bash 仍然可以作为用户的交互式 shell

 ~$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 2011-04-21 11:54 /bin/sh -> dash
Run Code Online (Sandbox Code Playgroud)