当前位置: 首页 > Linux

shellecho

时间:2023-04-06 03:31:25 Linux

a.txt的内容一共3行:123456781234567812345678shell脚本:forlinein`cata.txt`doecho${line}'abc'doneforcat遍历文本,输出每行文本withecho.line=12345678输出结果:abc45678这种现象很奇怪。我们想要的结果是12345678abc。我们通过调试代码echo${#line}可以看到字符串line的长度是9,而我们看到的内容长度实际上是8,这个现象看起来很奇怪。为了看看发生了什么,我们用vim打开文件a.txt,输入:setinvlist。这个命令可以看到文本中隐藏的字符,比如\r、\t等,我们可以看到每行末尾都有一个$符号。这是传统的\r回车符号。如果找到原因,我们可以手工解决:我们修改代码如下forlinein`cata.txt`doecho${line}abc|sed's/\r//g'|sed's/\n//g'donesed命令可以将\r替换为空,同时替换\n。因为很多时候window编辑的文件往往包含\r\n。以上是解决window编辑的dos格式文件,shell读取末尾换行的问题。我们用vim打开文件,输入:setff?可以看到文件格式:fileformat=dosorfileformat=unix通过:setfileformat=unix可以转换格式unix格式的文本没有上述问题。主要是我们有时候有窗口编辑文字的需求,需要适配脚本阅读