为什么'?'的价值根据我当前的目录更改?

时间:2013-11-07 10:45:08

标签: linux bash ubuntu

我的计算机上有一个名为template /的奇怪文件夹(我相信它是在我在树莓派上做一些低级编程时创建的)。奇怪的是,如果我在文件夹中并运行命令

$echo -n ? | hexdump

显示

0000000 000d                                   
0000001

但是,如果我在任何其他文件夹中,该命令看起来像这样

$echo -n ? | hexdump
0000000 003f                                   
0000001

为什么'?'的价值更改该文件夹,只更改该文件夹。

我应该注意到我发现这个的原因是有一个名为'?'的文件在我写的一些PHP中导致问题的模板/文件夹中。我试图在其他地方重新创建它,但发现我无法做到。

2 个答案:

答案 0 :(得分:4)

  

Why does the value of '?' change in that folder and only that folder.

?是shell globbing中的特殊字符。

?匹配任何字符,echo ?将匹配并列出当前目录中的任何文件名,长度恰好为1个字符。

PS:如果某个目录没有任何1个字符的文件名,那么就会回显文字?

答案 1 :(得分:1)

表达式echo ?首先由处理。它将?替换为任何单个字符文件名(如果存在)。如果没有此类文件,则保留?

示例(有两个单字符文件名的文件):

$ ls ?
b  c
$ echo ?
b c

或(没有单个字符文件)

$ ls ?
ls: cannot access ?: No such file or directory
$ echo ?
?

因此,如果您只想呈现一个?字符,则需要将其转义:

$ echo \?
?
$ echo '?'
?
$ echo "?"
?

我希望这有点帮助...