我想通过命令行执行一系列命令:
bash -l -c "commands"
然而,当我定义一个变量并尝试使用它们时,变量是未定义的(空的)。明确一点:
bash -l -c "var=MyVariable; echo $var"
我想通过命令行执行一系列命令:
bash -l -c "commands"
bash -l -c "var=MyVariable; echo $var"
Bash扩展(如这里所解释的)会在实际执行命令之前先将双引号内的变量值进行扩展。为了避免这种情况,您可以采用以下任一选项:
选项1:
使用单引号避免扩展
bash -l -c 'var=MyVariable; echo $var'
选项二:
通过转义所需变量来避免在双引号内扩展。
bash -l -c "var=MyVariable; echo \$var"
第二个选项允许您展开某些变量,但其他变量则不会。例如:expandVar=MyVariable1
bash -l -c "var=MyVariable; echo $expandVar; echo \$var"
Bash在双引号内展开变量。因此,在您的命令中,$var
将被当前值替换为var
之前执行命令。您可以使用单引号来实现所需效果:
bash -l -c 'var=MyVariable; echo $var'
-c
命令字符串传递命令时,将Bash作为登录Shell(-l
)调用是相当不寻常的,但您可能有自己的原因。