rm -rf xyz.log
echo "Enter n"
read n
x[0]=ABC
x[1]=DEF
x[2]=GHI
y[0]=MNO
y[1]=PQR
y[2]=STQ
z[0]=RTY
z[1]=LKJ
z[2]=LDF
for (( i=0; i<n; ++i ))
do
echo "${x[i]} ---- ${y[i]} ---- ${z[i]}" >> xyz.log
done
o=`cat xyz.log`
echo $o
当我执行上面的脚本时,我在一行中得到所有输出,但在 xyz.log 中,它是逐行打印的。我想在 echo 命令中打印同样的东西。提前致谢。
$./val.sh
输入n
3
ABC ---- MNO ---- RTY DEF ---- PQR ---- LKJ GHI ---- STQ ---- LDF
$ 猫 xyz.log
ABC ---- MNO ---- RTY
DEF ---- PQR ---- LKJ
GHI ---- STQ ---- LDF
最佳答案
您在最后一行中缺少引号:
o=`cat xyz.log`
echo "$o"
# ---^--^
添加引号将允许 shell 准确使用变量的内容。否则,您要求 shell 执行分词,其中任何空格序列(包括换行符)都将被单个空格替换(默认情况下)。
经验法则:始终引用 "$variables"
除非您特别不想引用它们。
另外,这是错误的
`rm -rf xyz.log`
您正在子 shell 中执行删除,然后将输出用作命令。在这种情况下,没有任何输出,但是你可以看到这样的效果
`echo hi there` # -- command not found 'hi'
关于linux - 如何在 shell 脚本中打印格式化为 cat 命令的 echo 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422065/