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

Sur*_*cle 5 bash

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

bash -l -c "commands"
Run Code Online (Sandbox Code Playgroud)

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

bash -l -c "var=MyVariable; echo $var"
Run Code Online (Sandbox Code Playgroud)

Cri*_*tes 7

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

选项1:

避免使用单引号进行扩展

bash -l -c 'var=MyVariable; echo $var'
Run Code Online (Sandbox Code Playgroud)

选项 2:

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

bash -l -c "var=MyVariable; echo \$var"
Run Code Online (Sandbox Code Playgroud)

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

expandVar=MyVariable1
bash -l -c "var=MyVariable; echo $expandVar; echo \$var"
Run Code Online (Sandbox Code Playgroud)


Ale*_*exP 5

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

bash -l -c 'var=MyVariable; echo $var'
Run Code Online (Sandbox Code Playgroud)

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