对表达式。[]。的Bash评估

时间:2019-06-27 14:14:36

标签: bash

请考虑以下表达式求值:

$ echo .
.
$ echo .[]
.[]
$ echo .[].
.[].
$ echo .[].[]
..                # <- WAT??
$ echo .[].[].
.[].[].
$ echo .[].[].[]
.[].[].[]

有人可以解释为什么.[].[]有这种特殊行为吗?

(在bash 3.2.57(1)-release (x86_64-apple-darwin18)4.4.23(1)-release (arm-unknown-linux-androideabi)中进行了测试。

我怀疑与..是有效的“文件”(父目录)有关。但是那为什么不.[].产生相同的结果?

1 个答案:

答案 0 :(得分:10)

这是因为[]创建了一个字符类。通常,]必须转义(反斜杠)才能包含在类中,但是如果它紧跟在左括号之后,则不必转义。因此,[].[]实际上是指与任何字符[\].[].]匹配的[

您可以通过创建名为.].[的文件来进行验证。

touch .\[ .\]
echo .[].[]  # .. .[ .]