这是正常的吗?我用bash,dash和ksh尝试了它(长篇故事......这一切都始于对其他东西的引用不佳)。在所有情况下,我得到:
$ echo [:print:][:blank:]
[:print:][:blank:]
$ touch in
$ echo [:print:][:blank:]
in
我认为它与'in'有关,因为'in'是'print'的子串,但是(比方说)'pr'不会这样做:
$ rm in; touch pr
$ echo [:print:][:blank:]
[:print:][:blank:]
此外,删除'空白'摆脱了这个:
$ touch in; echo [:print:]
[:print:]
我完全迷失了。在此先感谢您的帮助!
答案 0 :(得分:2)
这是因为shell执行路径名扩展,并将模式[:print:][:blank:]
替换为与该模式匹配的按字母顺序排列的文件名列表。如果找不到匹配的文件名,则该字保持不变。因此,如果您的目录包含名为in
的文件,则会将其拾取,因为它与模式匹配。
同样,如果您有名为pb
,ta
等的文件,他们也会被选中。但是,pr
与模式不匹配。
然后将这些文件名传递给echo
并打印在屏幕上。
有关详细信息,请参阅bash man page。
答案 1 :(得分:2)
[:print:][:blank:]
被视为一个glob模式,因此将打印与之匹配的任何文件名,就像您说echo *
时一样(在空目录中尝试)。
[:print:]
被解释为“其中一个字符{:
,p
,r
,i
,n
,{{1 {}}}“和t
类似;因此与[:blank:]
匹配,但不与in
匹配。
(pr
将匹配pr
。)