Shel读取文件转义符(\)丢失问题

  • 现有文件tmp.php,期望使用Shell输出原内容
  • 使用read读取文件内容,并用echo输出。发现输出结果中
    file=$1fileTmp=$1.tmpwhile read line      #使用read命令循环读取文件内容,并将读取的文件内容赋值给变量linedo echo "${line}" >> ${fileTmp}done <$file           #“done <$file”将整个while循环的标准输入指向文件$file
  • 读取文件的内容后,发现转义符(\)没有读出来
namespace apiv1;
class Module extends yiibaseModule
{public $class' = 'apiv1testModule';
}
  • 经查阅 read函数 有一个参数
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
  • 读取加上 -r 参数之后,发现\t \v \b被转义输出了
namespace api 1;
class Module extends yiaseModule
{public $class' = 'api 1 estModule';
}
  • 查询后发现脚本使用 #!/bin/sh 模式导致的,#!/bin/sh 中echo默认执行时会转义字符 改为 #!/bin/bash就正常了。

  • 附:echo 参数 -e 和 -E参数也可以控制转义符

-n 不换行输出
-e 启用反斜线转义解释
-E 禁用反斜线转义解释(默认)
  • 最终修改如下:
    file=$1fileTmp=$1.tmpwhile read  -r  line      #使用read命令循环读取文件内容,并将读取的文件内容赋值给变量linedo echo  -E "${line}" >> ${fileTmp}done <$file           #“done <$file”将整个while循环的标准输入指向文件$file


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部