在Bash中用单行命令定义变量

时间:2017-11-09 12:15:50

标签: bash

我试图通过以下命令执行命令列表:

bash -l -c "commands"

但是,当我定义变量a然后尝试使用它们时,变量是未定义的(空)。要明确:

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

2 个答案:

答案 0 :(得分:4)

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"

答案 1 :(得分:3)

Bash在双引号内扩展变量。因此,在执行命令之前,命令$var将替换为var 当前值。您想要的是使用单引号:

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

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