如果我使用变量,为什么dont命令执行成功?

时间:2015-04-08 16:36:23

标签: linux unix

我有以下脚本

WSO2_SCRIPT="JAVA_HOME=$JAVA_HOME /opt/autopilot/wso2is/bin/wso2server.sh"
WSO2_LOG="/var/log/autopilot/wso2is/autopilot-wso2is-initd.log"


${WSO2_SCRIPT} start >> ${WSO2_LOG} 2>&1 || echo failed

JAVA_HOME=$JAVA_HOME /opt/autopilot/wso2is/bin/wso2server.sh start >> /var/log/autopilot/wso2is/autopilot-wso2is-initd.log 2>&1 || echo failedagain

代码的第三行导致失败,因为我已经“失败”回显?

然而,第四行是成功的,我没有得到“失败的回应”。

第3行和第4行应该产生完全相同的结果。唯一的区别是我在第3行使用变量,在第4行显式。

为什么使用变量会导致失败?

1 个答案:

答案 0 :(得分:0)

当扩展变量没有引号时,它们会进行单词拆分和路径名扩展,但 shell语法解析。

这意味着您可以将以下内容放在变量中:

  • 仅在空格和空格上拆分的多个参数(包括命令名称)
  • 要展开的*.txt等全球

这也意味着您不能在变量中添加以下任何内容:

  • 重定向
  • 行情
  • 背景&
  • 条件和循环,包括if[[ .. ]]
  • 支撑和括号组
  • 参数扩展
  • 命令替换
  • 流程替换
  • 正如您所发现的那样:变量分配

如果你想将上述任何一个作为变量传递,你应该使用一个函数并改为参考函数。如果您不关心安全性和良好实践,您还可以使用eval将文本字符串评估为shell代码。