<分区>
这些工作如广告所示:
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 命令正确解释它?