You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bash脚本执行echo写入PHP文件时if条件判断行缺失原因咨询

行丢失的根本原因

丢失行的核心诱因是 Bash的历史扩展(History Expansion)特性 被触发:

  • 如果你是直接将这段代码复制到交互式Bash终端执行,双引号默认不会抑制!字符触发的历史扩展逻辑。你代码中if (!defined('MACHINE_ID')) {行的!后紧跟defined字符串,Bash会尝试检索历史命令中以defined开头的命令。
  • 当未匹配到对应历史命令时,Bash要么会抛出"event not found"错误,要么在部分默认配置下会直接裁剪掉触发扩展的整行内容,最终导致输出到文件的内容缺少了包含if判断的行。

补充说明:如果你是将脚本保存为.sh文件通过bash xxx.sh执行,非交互式Bash默认关闭历史扩展,不会出现该问题,所以问题多发生在直接复制命令到终端执行的场景。

修复方案

  • 方案1:将echo包裹的内容改用单引号包裹,单引号会原样输出所有内部字符,注意内部的单引号需要用'\''转义:
#!/bin/bash
echo '<?php
  if (!defined('\''MACHINE_ID'\'')) {
      define('\''MACHINE_ID'\'','\''SERVER_ID'\'');
  }
' > /var/www/html/NODE20_CONFIG.php
  • 方案2:执行命令前先在当前终端运行set +H关闭历史扩展,执行完命令后可执行set -H恢复默认配置。
  • 方案3:将脚本内容保存为文件后再执行,避免交互式环境的特殊字符解析问题。

内容的提问来源于stack exchange,提问作者Paweł

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:18:03