gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:35 25 4
gpt4 key购买 nike

我有以下脚本

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

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

但是第四行是成功的,我没有得到“failedagain”回显。

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

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

最佳答案

当变量在没有引号的情况下扩展时,它们会进行分词和路径名扩展,但不会 shell 语法分析。

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

  • 多个参数(包括命令名)被分割成空格和空格
  • *.txt 这样的 Glob 需要扩展

这也意味着您不能将以下任何内容放入变量中:

  • 重定向
  • 行情
  • 管道
  • 背景 &
  • 条件和循环,包括 if[[ .. ]]
  • 大括号和圆括号
  • 参数扩展
  • 命令替换
  • 处理替换
  • 正如您所发现的:变量赋值

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

关于linux - 如果我使用变量,为什么命令执行不成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29520456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com