zoukankan      html  css  js  c++  java
  • 常用的echo和cat,这次让我折在了特殊字符丢失问题上

    摘要:用过linux的都知道,echo和cat是我们常用的展示内容和写入内容的方式。

    本文分享自华为云社区《echo和cat,重定向到文件时,解决特殊字符丢失问题》,作者: 大金(内蒙的)。

    概述:

    用过linux的都知道,echo和cat是我们常用的展示内容和写入内容的方式。

    最近在使用这两个最简单的命令时,遇到了特殊字符写入失败问题。

    这里重新学习一下echo和cat两个命令,记录一下。

    三种失败场景

    问题现象1:echo使用了-e但是特殊字符还是生效了

    命令:

    echo -e 'aa\taa' > a.txt cat a.txt

    结果:

    解释:

    echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。

    可用参数说明:

    -n 不要在最后自动换行
    -e 若字符串出现以下字符,仍以特殊字符处理。

    特殊字符如下:

     \a 发出警告声;
       \b 删除前一个字符;
       \c 最后不加上换行符号;
       \f 换行但光标仍旧停留在原来的位置;
       \n 换行且光标移至行首;
       \r 光标移至行首,但不换行;
       \t 插入tab;
       \v 与\f相同;
       \\ 插入\字符;
       \nnn 插入nnn(八进制)所代表的ASCII字符;

    问题现象2:cat内容中带有$符号,字符丢失

    命令:

    cat << EOF > a.txt
    eth=pwd
    PATH=${eth}
    EOF

    结果:

    cat a.txt

    解释:

    cat内容中带有$变量的时候会将 $和变量名 变成空格,可以添加转义字符\搞定。
    也可以是将前面的EOF,增加‘’或者“”或者\,都可以解决,即是’EDF’,“EOF”,\EOF。

    问题现象3:<<- 重定向时,制表符消失

    命令:

    注意这里是 <<- EOF

    cat <<- EOF > a.txt
        eth=pwd
        PATH=/\${eth}
    EOF

    结果:

    cat a.txt

    解释:

    Here Document 是在Linux Shell 中的一种特殊的重定向方式。

    基本形式:

    cmd << delimiter
      Here Document Content
    delimiter

    作用:

    将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;

    注意事项如下:

    • @1、EOF 只是一个标识而已,可以替换成任意的合法字符
    • @2、作为结尾的EOF前后不能有任何字符
    • @3、作为起始的EOF前后的空格会被省略掉
    • @4、重定向增加参数"-"的时候。会清除中间内容的制表符

    总结

    往文件里面写内容的最好方式是啥呢?

    • 使用Here Document写法
    • 转义EOF这个特殊字符

    追加内容的场景:

    cat << \EOF >> 文件名
    文件内容
    EOF

    覆盖内容的场景:

    cat << \EOF >文件名
    文件内容
    EOF

     

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    利用集群因子优化
    HighCharts之2D对数饼图
    HighCharts之2D回归直线的散点
    HighCharts之2D柱状图、折线图的组合多轴图
    Oracle Data Guard_ 主库添加或删除在线重做日志文件
    Oracle Data Guard_ 主库重命名数据文件
    Oracle Data Guard_ 主备库传输表空间
    打开页面报错
    HighCharts之2D柱状图、折线图的组合双轴图
    HighCharts之2D柱状图、折线图和饼图的组合图
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/15752347.html
Copyright © 2011-2022 走看看