在“标准 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