这些按照广告宣传的那样工作:grep -ir 'hello world' .grep -ir hello\ world .这些不行:argumentString1=\'-ir 'hello world'\'argumentString2=\'-ir hello\\ world\'grep $argumentSt...
这些产品的效果正如广告所宣传的:
grep -ir 'hello world' .
grep -ir hello\ world .
这些不:
argumentString1="-ir 'hello world'"
argumentString2="-ir hello\\ world"
grep $argumentString1 .
grep $argumentString2 .
尽管 'hello world'
在第二个示例中被引号括起来,但 grep 将 'hello
(and hello\
) 解释为一个参数,将 world'
(and world
) 解释为另一个参数,这意味着,在这种情况下, 'hello
将是搜索模式,并且 world'
将是搜索路径。
同样,只有当参数从变量中扩展时,才会发生这种情况 argumentString
。在第一个示例中,grep 正确地将 'hello world'
(和 hello\ world
) 解释为单个参数。
有人能解释一下这是为什么吗? 有没有一种适当的方法来扩展字符串变量,以保留每个字符的语法,以便 shell 命令可以正确解释它?
为什么 shell 会忽略通过变量传递给它的参数中的引号字符?
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!