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

时间:2014-01-26 10:51:50

标签: 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)

3 个答案:

答案 0 :(得分:5)

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

因此,只有在工作目录中有一个名为1的单字符文件时才会发生这种情况。 e.g。

> mkdir emptydir && cd emptydir 
> echo ?
?
> touch 1 && echo ?
1

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

进行打印

答案 1 :(得分:2)

您可能在当前工作目录中有一个名为“1”的文件。

# echo ?
?

# touch 1
# echo ?
1

答案 2 :(得分:1)

使用bash的nullglob option,您可以禁止将glob模式打印为字符串:

$ echo ?
?
$ shopt -s nullglob
$ echo ?

$ touch A
$ echo ?
A