求助: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
相关产品推荐
相关产品推荐

