bash中echo搭配方括号输出异常的原因咨询
bash中echo搭配方括号输出异常的原因咨询
嘿,这其实是**bash的文件名扩展(通配符匹配)**在搞鬼,我给你拆解下:
先看你执行的操作步骤:
# ls -l insgesamt 0 # echo [a] [a]
这时候当前目录没有任何文件,bash遇到[a]这种带方括号的语法,会把它当成字符类通配符——也就是匹配名字是方括号里任意一个字符的文件。但因为当前目录里没有符合条件的文件(连a都没有),bash就不会对这个通配符做展开,直接把[a]原封不动传给echo,所以输出就是[a]。
等你创建了文件a之后:
# > a # echo [a] a
这时候当前目录存在名为a的文件,bash看到[a]这个字符类通配符,就会自动匹配到文件a,把[a]替换成实际的文件名a再传给echo命令,所以echo输出的就变成a了。
简单总结:方括号在bash里不是普通字符,它属于通配符的一种,只有当没有匹配到对应文件时才会原样输出;一旦有匹配的文件,就会被替换成实际的文件名。
备注:内容来源于stack exchange,提问作者GBF
相关产品推荐
相关产品推荐

