为什么回声?正在返回单个 | 字符到标准输出

RKA*_*RKA 4 shell bash wildcards

我试图理解这个命令的输出 - echo ?。我看到的输出是单个|字符。

cho*_*oba 11

因为?是 shell 的特殊通配符。$abc 不存在,因此它被扩展为一个空字符串,?并被当前目录中存在的任何单字符文件或目录替换。因此,|您的当前目录中可能有一个文件/目录。

在我的系统上,输出是不同的:

$ echo $abc?
_ 1
Run Code Online (Sandbox Code Playgroud)

如果没有单字符文件/目录,则?未展开。

而且,确实有目录_1.

  • @GeorgeUdosen 那么你家中有一个名为`~` 的文件/目录。正如 choroba 解释的那样,`echo ?` 基本上意味着“打印当前目录中与 glob `?` 匹配的文件名列表”。glob `?` 匹配任何单个字符,所以这就是打印的内容。 (5认同)
  • 我猜你是用`... > | 创建的 ...` 当错误地将重定向与管道结合使用时(我经常发现到处都是名为 `|` 或 `{` 的文件)。 (4认同)