linux - 如何在 shell 脚本中打印格式化为 cat 命令的 echo 语句?

标签 linux shell unix awk echo

    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/

相关文章:

linux - 在文件内搜索和替换

bash - 如何将语法突出显示添加到 make 错误消息中?

linux - 使用 Bash 在字符串中搜索子字符串?

linux - 内核中的malloc

linux - 如何在 linux 中使用 iptables 将 http 和 https 流量转发到透明代理

c++ - 如何在 Boost.ASIO 中分配一个已经连接的本地套接字类型(TCP)

c - shell 排序随机 float 组不起作用

linux - vim 函数 "update timestamp"事件 "BufWrite": to be improved

linux - 跳转后寄存器和变量不保存状态

c - 关于使用低级函数