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

Shell脚本如何将长字符串按分隔符拆分为多行独立存储

解决方案

问题根源有两点:

  1. 普通echo命令默认不解析\n转义字符,会直接将其作为字面量输出到文件和弹窗中
  2. 原有字符串拼接时每次追加的\n\n会导致每条错误信息之间多出多余空行,末尾也会残留多余换行符

最优修改方案(从拼接逻辑根源优化)

直接调整字符串拼接规则,用printf替代echo保证转义兼容性,修改后的完整代码如下:

#!/bin/sh
# 初始化字符串变量避免未定义警告
strg=""

if grep -R "Error1 in Machine 1 " /home/new/Report.txt
then
echo "Error1 found in Machine 1"
strg="${strg}Error1 found in Machine 1\n"
else
echo "No Error found"
fi

if grep -R "Error2 in Machine 1" /home/new/Report.txt
then
echo "Error2 found in Machine 1"
strg="${strg}Error2 in Machine 1\n"
else
echo "No Error found"
fi

if grep -R "Error2 in Machine 2" /home/new/Report.txt
then
echo "Error2 found in Machine 2"
strg="${strg}Error2 in Machine 2\n"
else
echo "No Error found"
fi

# whiptail支持\n转义,直接传入即可
whiptail --title "Report Error" --msgbox "${strg}" 24 30
# 用printf输出转义后的内容到文件,自动处理换行
printf "%b" "${strg}" >| /home/new/err_$(date +%Y%m%d%H%M%S).txt

说明:

  • 把原有拼接逻辑中的\n\n改为\n,保证每条错误仅占一行,无多余空行
  • 用printf "%b"替代普通echo,完全兼容POSIX标准解析转义字符,不会出现\n字面量残留问题
  • 给date增加格式化参数+%Y%m%d%H%M%S,避免生成的文件名携带空格导致后续操作异常

无需修改原有拼接逻辑的兼容方案

如果不想调整原有拼接规则,可直接在输出前对已有字符串做过滤处理,删除多余分隔符和空行:

# 转义后删除空行,合并连续换行
processed_strg=$(printf "%b" "${strg}" | sed '/^$/d' | tr -s '\n')
# 后续输出使用处理后的变量即可
whiptail --title "Report Error" --msgbox "${processed_strg}" 24 30
echo "${processed_strg}" >| /home/new/err_$(date).txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:03