我需要在shell脚本中使用for循环格式化输出的帮助

cczfrluj  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(131)

我有在我的设置中捕获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   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

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

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   34   12Mi   122

我要找的输出格式是

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

34   12Mi   122   123   333   450

34   12Mi   122   123   333   450

34   12Mi   122   123   333   450

有没有人可以帮助我,让我明白我在这里犯了什么错误,以及有什么可能的解决办法。

j1dl9f46

j1dl9f461#

当你执行$(unset ${Data})时,你是在一个subshell* 中运行unset ${Data} *,然后试图把它的输出(空字符串)作为一个命令来运行。

  • 子shell不能影响其父环境,而且您也不希望将输出作为命令运行
  • unset将变量的 name(而不是其扩展名)作为参数

快速解决方法是将$(unset ${Data})替换为unset Data
更简单的总体方法可以是完全跳过中间变量,并将重定向移出循环:

for i in {1..10}; do
    printf '%s   ' "$e" "$f" "$a" "$b" "$c"
    printf '%s\n\n' "$d"
done >> "$LOGFILE"

这不再需要$Data$space
这会打印出您想要显示的输出,尽管您显示的实际输出与您的脚本并不对应,因为脚本的每一行都以三个空格开始。要实现这一点,printf字符串必须分别为' %s'' %s\n\n'

相关问题