为什么shell忽略通过变量传递给它的参数中的引号?这项工作如广告所示:# example 1#!/bin/bashgrep -ir 'hello world' .这并不是:# example 2#!/bin/bashargumentString="-ir 'hello world'"grep $argumentString .尽管'hello world'在第二个示例中用引号括起来,grep解释'hello作为一个论点world'作为另一种,这意味着,在这种情况下,'hello将是搜索模式world'将是搜索路径。同样,只有当参数从argumentString变量。grep正确解释'hello world'作为第一个例子中的一个参数。有人能解释一下为什么吗?是否有适当的方法来展开字符串变量,以保留每个字符的语法,从而使其被shell命令正确地解释?
3 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
为什么
固定
bash
argumentArray=(-ir 'hello world')grep "${argumentArray[@]}" .
eval
:
argumentString="-ir 'hello world'"eval "grep $argumentString ."
eval
eval
不负相思意
TA贡献1777条经验 获得超10个赞
argumentString="-ir 'hello world'"bash -c "grep $argumentString ."
只能在命令或参数字符串中使用单引号。 命令只有导出的环境变量可用。
cmd="prefix=`pwd` && ls | xargs -n 1 echo \'In $prefix:\'"bash -c "$cmd"
- 3 回答
- 0 关注
- 1195 浏览
添加回答
举报
0/150
提交
取消