常用的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

 

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

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4526289/blog/5389886

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。