我正在研究一个简单的守护进程示例,并注意到以下命令在每次迭代时都会打印相同的时间值.
/bin/bash -c "while true; do echo `date`; sleep 1; done"
输出:
Wed Dec 25 08:00:47 UTC 2013
Wed Dec 25 08:00:47 UTC 2013
Wed Dec 25 08:00:47 UTC 2013
但是,如果我将上面的代码放在脚本中然后运行脚本,它会给出预期的输出.
#!/bin/bash
while true; do
echo `date`
sleep 1
done
输出:
Wed Dec 25 08:02:58 UTC 2013
Wed Dec 25 08:02:59 UTC 2013
Wed Dec 25 08:03:00 UTC 2013
这怎么可能?这是预期的产出吗?
它的行为完全符合预期.该date
取代反应是由呼叫者的bash不是由被叫方进行.以这种方式改变命令:
/bin/bash -c 'while true; do echo `date`; sleep 1; done'
并且你得到了你期望的行为.
不同之处在于单引号和双引号 - 后者受参数扩展和命令替换的影响