这些按照宣传所述运作正常:
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 $argumentString1 .
扩展为grep -ir hello world .
。 - undefinedgrep $argumentString2 .
扩展为grep -ir hello\ world .
(即反斜杠是 grep 的第二个参数的一部分)。 - undefined