在Bash,为什么会'回声?' 打印1?

sha*_*ibn 1 bash glob

我注意到,当我尝试回声?时,它打印1.

我读到它是一张"外卡(单字符).[问号]?字符作为单字符"外卡"用于在globbing中进行文件扩展,以及在扩展正则表达式中表示一个字符.(正如我在网上看到的标题为"Advanced Bash-Scripting Guide:shell脚本的完整指南,使用Bash"的文档中所写的).

$ echo ?
1

$ echo ? ? ?
1 1 1

$ echo ? 1 ?
1 1 1

$ ls shai?n
shai.txt

bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

Rei*_*ase 5

  • ? 如果不存在,则扩展为所有一个字符文件或其自身
  • * 如果没有eixsts,则扩展到所有文件或其自身

因此,只有1在工作目录中调用单字符文件时才会发生这种情况.例如

> mkdir emptydir && cd emptydir 
> echo ?
?
> touch 1 && echo ?
1
Run Code Online (Sandbox Code Playgroud)

另请注意,评论指出您可以通过执行echo "?"或打印它echo \?