Bash - 一个简单的问号 (?)

问题描述

我在玩一些 bash 功能,当我尝试回显一些输出时,我注意到

echo what about in some more complex example ?

结果

在一些更复杂的例子中怎么样 \

我知道用引号转义问号或整行可以解决问题,但我很好奇为什么会这样。

所以我的两个问题是:

  1. bash 中简单问号的含义是什么(例如,我知道“$?”特殊参数和正则表达式用法)?
  2. 我想这是一个 bash 环境变量或某个变量之王。如何检查变量?例如,可以使用 type 关键字检查命令,即 type cd

解决方法

在这种情况下,它作为 glob 模式起作用。如果当前工作目录中存在具有一个字符名称的文件,shell 会将一个不带引号的问号扩展为它们的名称。

$ echo ? \? '?' "?"
? ? ? ?
$ touch a b c
$ echo ? \? '?' "?"
a b c ? ? ?

类似地,?? 扩展为两个字符的文件名,??* 扩展为长度超过一个字符的文件名,??[ab] 扩展为以 a 结尾的三个字符的文件名 strong> 或 a b

有关详细信息,请参阅 Filename Expansion