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

Hal*_*ast 11 bash

请考虑以下表达式评估:

$ echo .
.
$ echo .[]
.[]
$ echo .[].
.[].
$ echo .[].[]
..                # <- WAT??
$ echo .[].[].
.[].[].
$ echo .[].[].[]
.[].[].[]
Run Code Online (Sandbox Code Playgroud)

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

(经过bash 3.2.57(1)-release (x86_64-apple-darwin18)4.4.23(1)-release (arm-unknown-linux-androideabi)

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

cho*_*oba 10

那是因为[]创建了一个字符类。通常,]必须对此进行转义(反斜杠)才能包含在该类中,但是如果它紧跟在开括号之后,则不必进行转义。因此,[].[]实际上装置[\].[]相匹配的任意字符.][

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

touch .\[ .\]
echo .[].[]  # .. .[ .]
Run Code Online (Sandbox Code Playgroud)