在Bash中,“echo”为什么要打印1?

在Bash中,“echo”为什么要打印1?,bash,glob,Bash,Glob,我注意到当我尝试回显?时,它会打印1 我读到它是一个通配符。[问号]?字符在globbing中用作文件名扩展的单字符通配符,并在扩展正则表达式中表示一个字符。正如我在网上读到的一篇名为《高级Bash脚本指南:使用Bash编写shell脚本的完整指南》的文档中所述 $ 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)-re

我注意到当我尝试回显?时,它会打印1

我读到它是一个通配符。[问号]?字符在globbing中用作文件名扩展的单字符通配符,并在扩展正则表达式中表示一个字符。正如我在网上读到的一篇名为《高级Bash脚本指南:使用Bash编写shell脚本的完整指南》的文档中所述

$ 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)
? 扩展到所有一个字符的文件,如果不存在,则扩展到文件本身 *扩展到所有文件或自身(如果没有EIXST) 所以,发生这种情况的唯一方法是在工作目录中有一个名为1的单字符文件。e、 g

> mkdir emptydir && cd emptydir 
> echo ?
?
> touch 1 && echo ?
1
另请注意,正如评论所指出的,您可以通过echo打印它?还是回声

? 扩展到所有一个字符的文件,如果不存在,则扩展到文件本身 *扩展到所有文件或自身(如果没有EIXST) 所以,发生这种情况的唯一方法是在工作目录中有一个名为1的单字符文件。e、 g

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

另请注意,正如评论所指出的,您可以通过echo打印它?或者echo\?

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

# echo ?
?

# touch 1
# echo ?
1

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

# echo ?
?

# touch 1
# echo ?
1
使用bash,可以禁止将glob模式打印为字符串:

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

$ touch A
$ echo ?
A
使用bash,可以禁止将glob模式打印为字符串:

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

$ touch A
$ echo ?
A

它对我有效我得到的是问号,不是数字1,我使用的是GNU bash,版本4.2.251-release x86_64-pc-linux-gnuth如果我回答了一个类似的问题,就错过了按标题搜索,看它对我有效我得到的是问号,不是数字1,我使用的是GNU bash,版本4.2.251-release x86_64-pc-linux-gnuth我应该在错过之前回答一个类似的问题按标题搜索,请参阅可能值得一提的OP如何实际输出a?。虽然为了公平起见,他们没有问。通过转义\或引用.Yep,我在测试此问题的目录中有一个名为1的文件:感谢您抽出时间回答此问题!可能值得一提的是OP是如何实际输出a?。虽然为了公平起见,他们没有问。通过转义\或引用.Yep,我在测试此问题的目录中有一个名为1的文件:感谢您抽出时间回答此问题!