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

  • 现有文件tmp.php,期望使用Shell输出原内容
<?php
namespace api\v1;
class Module extends \yii\base\Module
{
    public $class' = 'api\v1\test\Module';
}
  • 使用read读取文件内容,并用echo输出。发现输出结果中
    file=$1
    fileTmp=$1.tmp
    while read line      #使用read命令循环读取文件内容,并将读取的文件内容赋值给变量line
    do 
       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=$1
    fileTmp=$1.tmp
    while read  -r  line      #使用read命令循环读取文件内容,并将读取的文件内容赋值给变量line
    do 
       echo  -E "${line}" >> ${fileTmp}
    done <$file           #“done <$file”将整个while循环的标准输入指向文件$file
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值