Bash循环意外地表现

 书友48058773 发布于 2023-02-08 11:24

我正在研究一个简单的守护进程示例,并注意到以下命令在每次迭代时都会打印相同的时间值.

/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

这怎么可能?这是预期的产出吗?

1 个回答
  • 它的行为完全符合预期.该date取代反应是由呼叫者的bash不是由被叫方进行.以这种方式改变命令:

    /bin/bash -c 'while true; do echo `date`; sleep 1; done'
    

    并且你得到了你期望的行为.

    不同之处在于单引号和双引号 - 后者受参数扩展命令替换的影响

    2023-02-08 11:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有