双引号内的通配符是否可以覆盖?

双引号内的通配符是否可以覆盖?

在“标准 BASH”中,双引号内的通配符是否可以组成通配符?例如:

$ touch abc
$ ls "*abc*"

那会怎样?或者那在 bash 上不起作用?

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

答案1

简短回答:不

man bash 的长答案:

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

所以:

~$ touch sas
~$ ls *a*
sas
~$ ls "*a*"
ls: cannot access *a*: No such file or directory

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

对于第二个问题:您问的是 dash 吗?dash 是用于脚本的轻量级 shell。在 debian 和 ubuntu per extension(基于 debian)中,别名为 sh;它比 bash 的主要优势在于速度快,因此默认情况下它用于系统脚本;但是默认情况下,bash 仍可用作用户的交互式 shell

 ~$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 2011-04-21 11:54 /bin/sh -> dash

相关内容