假设您的bash脚本中有这两个语句:
# No. 1
MSG="Automatic reboot now."
echo $MSG
# No. 2
MSG=""Automatic reboot now.""
echo $MSG
声明编号1的输出符合预期(只需打印)。如果bash运行语句2,则重新启动计算机(将执行任何有效的bash命令)。
但为什么?
答案 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
。