我有在我的设置中捕获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
有没有人可以帮助我,让我明白我在这里犯了什么错误,以及有什么可能的解决办法。
1条答案
按热度按时间j1dl9f461#
当你执行
$(unset ${Data})
时,你是在一个subshell* 中运行unset ${Data}
*,然后试图把它的输出(空字符串)作为一个命令来运行。unset
将变量的 name(而不是其扩展名)作为参数快速解决方法是将
$(unset ${Data})
替换为unset Data
。更简单的总体方法可以是完全跳过中间变量,并将重定向移出循环:
这不再需要
$Data
或$space
。这会打印出您想要显示的输出,尽管您显示的实际输出与您的脚本并不对应,因为脚本的每一行都以三个空格开始。要实现这一点,
printf
字符串必须分别为' %s'
和' %s\n\n'
。