请考虑以下表达式求值:
$ 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)
中进行了测试。
我怀疑与..
是有效的“文件”(父目录)有关。但是那为什么不.[].
产生相同的结果?
答案 0 :(得分:10)
这是因为[]
创建了一个字符类。通常,]
必须转义(反斜杠)才能包含在类中,但是如果它紧跟在左括号之后,则不必转义。因此,[].[]
实际上是指与任何字符[\].[]
,.
和]
匹配的[
。
您可以通过创建名为.]
和.[
的文件来进行验证。
touch .\[ .\]
echo .[].[] # .. .[ .]