【问题标题】:Define variable in single line command in Bash [duplicate]在 Bash 的单行命令中定义变量 [重复]
【发布时间】:2018-04-22 10:23:59
【问题描述】:

我正在尝试通过命令执行命令列表:

bash -l -c "commands"

但是,当我定义一个变量然后尝试使用它们时,该变量是未定义的(空的)。说清楚:

bash -l -c "var=MyVariable; echo $var"

【问题讨论】:

    标签: bash


    【解决方案1】:

    Bash 扩展(如 here 所解释的)将在实际执行命令之前扩展双引号内的变量值。为避免这种情况,您可以遵循以下任一选项:

    选项 1:

    避免使用单引号展开

    bash -l -c 'var=MyVariable; echo $var'
    

    选项 2:

    通过转义所需变量来避免双引号内的扩展

    bash -l -c "var=MyVariable; echo \$var"
    

    第二个选项允许您扩展一些变量,而另一些则不能。例如:

    expandVar=MyVariable1
    bash -l -c "var=MyVariable; echo $expandVar; echo \$var"
    

    【讨论】:

      【解决方案2】:

      Bash 在双引号内扩展变量。所以实际上在你的命令中$varvarcurrent 值替换before 命令被执行。你想要的可以通过使用单引号来完成:

      bash -l -c 'var=MyVariable; echo $var'
      

      请注意,在使用-c 传递命令字符串时,将 Bash 作为登录 shell (-l) 调用是相当不寻常的,但您可能有自己的理由。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-01
        • 2023-04-07
        • 2013-09-29
        • 1970-01-01
        • 2014-08-27
        • 2017-10-18
        • 2018-08-22
        • 1970-01-01
        相关资源
        最近更新 更多