Linux的这个通配符,花了两天时间,终于搞明白了
最近老被同学问到关于通配符操作的问题,本来觉得是一个很简单的问题,结果它和其它命令一结合,就很难给出合理的理解 。进行了很多实验,总是难以有个满意的答案 。于是决定要好好研究一番 ,终于在多次的测试和验证过程中,彻底地了解这个符号的含义 。
1.命令回显结果
以下为一些命令的回显结果,根据这些结果,你都能解释出每个命令的含义 ?
2.进行验证
以上只是部分进行验证命令的输出结果,但不管是哪些,很多的结果都让人无法理解 。尤其是在和不同的命令进行结合使用后,更会让人产生一些误解 。
那么,在进行命令之前,我们再来回顾下这个通配符*的意思 。以下是百度百科或其它网站查看对通配符解释 。
通配符是一种特殊语句,主要有星号()和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。 实际上用“Not?pad”可以对应Notepad\MyNotepad【*可以代表任何字符串;?仅代表单个字符串,但此单字必须存在】;Notep[ao]d可以对应Notepad\Notepod【ao代表a与o里二选一】,其余以此类推。
* 匹配0到任意字符
大多数的解释是* 代表的是0到任意个字符 。
那么按照这个解释,我们去对上面的命令进行验证 ,看看能否解释通 。
通过这个命令,基本理解为它是查找文件中的内容了 ,因为从结果来看,这俩个内容是从c.txt中查找到的。
以上最后的这个截图非常重要,通过它猜测出*很可能是代表的是所有文件 。
接下来,我们把* 当做所有的文件名再次进行验证 。
3.总结
所以,通过以上的验证可以得出结果 ,*代表当前路径下所有的文件名(字符) ,也可以理解为任意的字符 。
也就是说*代表任意个字符是没有问题的 。
但是需要注意的是,它和其它命令结合后,这些文件名在当前语境就可能变为不同的意思了 ,比如grep 后的第一个文件名(字符)它是被当做过滤字符被使用的,但是后面的都当成了文件名被使用了 。