这正常吗?我试过了(说来话长……这一切都是从bash、dash和ksh的蹩脚引用开始的。在所有情况下我得到:
$ echo [:print:][:blank:]
[:print:][:blank:]
$ touch in
$ echo [:print:][:blank:]
in
我认为它与'in'是'print'的子字符串有关,但是(说)'pr'不行:
$ rm in; touch pr
$ echo [:print:][:blank:]
[:print:][:blank:]
同时,去掉'blank'可以去掉this:
$ touch in; echo [:print:]
[:print:]
我完全迷路了。提前感谢您的帮助!
[:print:][:blank:]
被视为glob模式,因此任何匹配它的文件名都将被打印,就像您说echo *
一样(在空目录中尝试)。
[:print:]
被解释为"字符{:
, p
, r
, i
, n
, t
}之一",[:blank:]
同样如此;因此与in
匹配,但与pr
不匹配。
(pr
将匹配[:print:][:print:]
)
这是因为shell执行路径名展开,并用匹配该模式的文件名按字母顺序排序的列表替换模式[:print:][:blank:]
。如果没有找到匹配的文件名,则保持单词不变。因此,如果您的目录包含一个名为in
的文件,它将被拾取,因为它与模式匹配。
pb
、ta
等文件,它们也会被拾取。但是,pr
与模式不匹配。
这些文件名然后被传递给echo
并打印在屏幕上。
更多信息,请参见bash手册页