最近,我正在忙着编写bash脚本来满足我的需求。但是,在编码期间,我发现双引号的用法有时相互矛盾。例如,我尝试查找一些与正则表达式匹配的文件,例如ls "*.log"
。我习惯性地*.log
用双引号将括起来,但会收到错误消息cannot access '*.txt': No such file or directory
。
之后,我从教程中发现了一个原因,*
当您希望将*
其用作通配符时,将双引号引起来是没有用的。因此,ls *.log
是正确的用法。
然而,当我使用的grep
命令与正则表达式,他们三个(""
,''
,无引号)不会改变我的正则表达式的本义,如grep "^s.txt"
。此时,双引号使正则表达式处于活动状态。
命令之间是否存在一些设计冲突?能否请您给我一些技巧,以快速掌握常用命令的正确引号用法?
如果是ls *.log
外壳,则在ls
启动前先扩展通配符。然后ls
给出结果。该工具没有可*
自行扩展的功能。
在外壳程序的情况下,grep "^s.txt"
仅删除引号(通常仍然有用以告诉外壳程序如何处理带引号的字符串),grep
获取^s.txt
并执行其工作。如果不加引号,^s.txt
则外壳程序无关,因此结果是相同的。但总体上可能会有所不同(例如与a*.*txt
)。
比较一下:find
和通配符(和通配符)。两者find -name
和外壳能够使用的*
作为通配符。这取决于将采取行动的报价。结果通常是不同的,有时是错误的。您需要知道是否要扩展外壳*
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句