【发布时间】:2020-12-20 04:21:45
【问题描述】:
这些工作如宣传的那样:
grep -ir 'hello world' .
grep -ir hello\ world .
这些不:
argumentString1="-ir 'hello world'"
argumentString2="-ir hello\\ world"
grep $argumentString1 .
grep $argumentString2 .
尽管'hello world' 在第二个示例中被引号括起来,grep 将'hello(和hello\)解释为一个参数,将world'(和world)解释为另一个参数,这意味着,在这种情况下, 'hello 将是搜索模式,world' 将是搜索路径。
同样,这只发生在从argumentString 变量扩展参数时。在第一个示例中,grep 正确地将 'hello world'(和 hello\ world)解释为单个参数。
谁能解释这是为什么?是否有适当的方法来扩展字符串变量,以保留每个字符的语法,以便 shell 命令正确解释它?
【问题讨论】:
-
我应该注意这与 grep 本身没有任何关系;这更像是一个 bash 问题(使用任何其他命令具有相同的效果)
标签: bash variables syntax quoting expansion