Bash,双引号和"重启"命令

时间:2018-04-27 12:08:48

标签: bash

假设您的bash脚本中有这两个语句:

# No. 1
MSG="Automatic reboot now."
echo $MSG

# No. 2
MSG=""Automatic reboot now.""
echo $MSG

声明编号1的输出符合预期(只需打印)。如果bash运行语句2,则重新启动计算机(将执行任何有效的bash命令)。

但为什么?

2 个答案:

答案 0 :(得分:5)

那是因为MSG=""Automatic reboot now.""的含义如下:

  

使用env执行reboot now.。变种。 MSG设置为Automatic

它相当于:

MSG=Automatic reboot now.

答案 1 :(得分:3)

鲜为人知的shell功能是能够在单个命令的持续时间内设置环境变量。这是通过在命令前添加一个或多个分配来完成的,如:var1=foo var2=bar command

这是一个示范。注意如何保留$MSG的原始值。

$ export MSG=Hello
$ bash -c 'echo $MSG'
Hello
$ MSG=Goodbye bash -c 'echo $MSG'
Goodbye
$ bash -c 'echo $MSG'
Hello

现在回答你的问题:

MSG=""Automatic reboot now.""

双引号对彼此无效,也可能不存在。它相当于:

MSG=Automatic reboot now.

执行reboot,参数为now.$MSG环境变量设为Automatic