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

求助:Bash脚本读取含大括号的文件内容无法正常输出

问题原因

问题出在使用echo -e输出包含大括号的内容时,echo -e会尝试解析字符串中的特殊字符或触发shell扩展,导致大括号及内部内容无法正常输出。echo的行为在不同环境中存在差异,对于包含特殊符号(如{})的未知文本,这种输出方式不可靠。

解决方案

将脚本中输出文件内容的echo -e替换为printf,printf不会随意解析输入内容,能稳定输出所有字符,包括大括号和HTML标签。修改后的关键代码如下:

while IFS= read -r line; do
    # 原样输出文件行内容
    printf '%s\n' "$line"
    # 保留颜色前缀的同时输出原始内容
    printf '%b\n' "${green}[${blue}*${green}]${yellow} $line"
done < /var/www/html/data/php/data.txt
完整修改后的脚本
rm -rf /var/www/html/data/php/data.txt
echo -e "${info}Waiting to read from file. ${cyan}Press ${red}Ctrl + C ${cyan}to exit...
"
while true; do

    if [[ -e "/var/www/html/data/php/data.txt" ]]; then
        echo -e "\007${success}New data detected!
"
        while IFS= read -r line; do
            printf '%s\n' "$line"
            printf '%b\n' "${green}[${blue}*${green}]${yellow} $line"
        done < /var/www/html/data/php/data.txt
        cat /var/www/html/data/php/data >> "$cwd/data.txt"
        rm -rf data.txt
    fi
    sleep 0.5
    
done

说明:

  • printf '%s\n' "$line":%s表示按字符串原样输出,不会解析任何转义序列,确保文件内容完全原样输出。
  • printf '%b\n' "...$line":%b会解析字符串中的ANSI转义码(比如颜色变量里的格式控制符),同时$line部分仍按原始内容输出,既保留颜色格式,又不会破坏文件内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:25:04