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

7

我想通过命令行执行一系列命令:

bash -l -c "commands"

然而,当我定义一个变量并尝试使用它们时,变量是未定义的(空的)。明确一点:
bash -l -c "var=MyVariable; echo $var"
2个回答

10

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"

5

Bash在双引号内展开变量。因此,在您的命令中,$var将被当前值替换为var之前执行命令。您可以使用单引号来实现所需效果:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接