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

Shell脚本for循环输出格式异常求助:内容重复叠加

问题:Shell脚本输出内容叠加,无法每行输出单条数据

我需要在环境中捕获Pod内存及其他相关信息,编写了一段Shell脚本,但执行后输出内容不断叠加,而非每行输出单条指定数据。

脚本代码

LOGFILE='/root/User1/test/log'
Data=""
space="   "
e=34
f=12Mi
a=122
b=123
c=333
d=450

for i in {1..10}; do
    Data+=$space
    Data+=$a
    Data+=$space
    Data+=$b
    Data+=$space
    Data+=$c
    Data+=$space
    Data+=$d
    Data+=$space
    Data+=$e 
    Data+=$space
    Data+=$f
    printf "%s" "$Data" >> ${LOGFILE}
    echo $'\n' >> ${LOGFILE}
    $(unset ${Data})
    
done

当前输出(内容叠加)

34   12Mi   122   123   333   450

34   12Mi   122   123   333   450   34   12Mi   122   123   333   450

...(后续行持续叠加)

期望输出(每行单条数据)

34   12Mi   122   123   333   450

34   12Mi   122   123   333   450
 
...(每行均为相同单条数据)
错误原因分析
  • 变量累加未重置:Data变量在循环外初始化后,每次循环都用Data+=进行内容追加,导致每轮循环都会把新数据加到已有内容后面,输出自然叠加。
  • unset命令使用错误:$(unset ${Data})是错误写法,unset的参数应该是变量名,不是变量值,这里写成unset ${Data}相当于尝试删除以Data内容命名的变量,完全起不到清空Data的作用。
解决方案

方案1:每次循环前重置Data变量

在循环内部开头重新初始化Data为空,避免累加:

LOGFILE='/root/User1/test/log'
space="   "
e=34
f=12Mi
a=122
b=123
c=333
d=450

for i in {1..10}; do
    Data=""  # 每次循环开始时清空变量
    Data+=$space
    Data+=$a
    Data+=$space
    Data+=$b
    Data+=$space
    Data+=$c
    Data+=$space
    Data+=$d
    Data+=$space
    Data+=$e 
    Data+=$space
    Data+=$f
    printf "%s\n" "$Data" >> ${LOGFILE}  # 直接用printf换行,简化代码
done

方案2:无需使用Data变量,直接拼接输出

既然只是要输出固定格式的内容,完全可以跳过Data变量,直接用printf一次性输出,更简洁高效:

LOGFILE='/root/User1/test/log'
space="   "
e=34
f=12Mi
a=122
b=123
c=333
d=450

for i in {1..10}; do
    # 固定三空格分隔的写法,可读性更强
    printf "%s   %s   %s   %s   %s   %s\n" "$a" "$b" "$c" "$d" "$e" "$f" >> ${LOGFILE}
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:19:21