这些工作如广告:
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'
(and hello\ world
) 解释为单个参数。
谁能解释这是为什么?是否有适当的方法来扩展字符串变量,以保留每个字符的语法,以便 shell 命令正确解释它?