写点什么

常用的 echo 和 cat,这次让我折在了特殊字符丢失问题上

  • 2021 年 12 月 31 日
  • 本文字数:939 字

    阅读完需:约 3 分钟

摘要:用过 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.txteth=pwdPATH=${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 Contentdelimiter
复制代码

作用

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

注意事项如下:

  • @1、EOF 只是一个标识而已,可以替换成任意的合法字符

  • @2、作为结尾的 EOF 前后不能有任何字符

  • @3、作为起始的 EOF 前后的空格会被省略掉

  • @4、重定向增加参数"-"的时候。会清除中间内容的制表符

总结

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

  • 使用 Here Document 写法

  • 转义 EOF 这个特殊字符

追加内容的场景:

cat << \EOF >> 文件名文件内容EOF
复制代码

覆盖内容的场景:

cat << \EOF >文件名文件内容EOF
复制代码


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

发布于: 1 小时前
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
常用的echo和cat,这次让我折在了特殊字符丢失问题上