我试图通过以下命令执行命令列表:
bash -l -c "commands"
但是,当我定义变量a然后尝试使用它们时,变量是未定义的(空)。要明确:
bash -l -c "var=MyVariable; echo $var"
答案 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
)调用是很不寻常的,但是您可能有理由。