回车问题

use*_*634 4 shell bash newlines

我在 bash 脚本中有这个

DAY2="20130605"<Cr>
echo  "This is yesterday date:"$DAY2"end"
Run Code Online (Sandbox Code Playgroud)

为什么输出如下?好像有一个回车,DAY2但它来自哪里?

ends is yesterday date:20130605
Run Code Online (Sandbox Code Playgroud)

Caf*_*eur 6

回车将光标放回行首。您的输出字符串是:

    This is yesterday date:20130605<Cr>end
Run Code Online (Sandbox Code Playgroud)

除了,当终端点击 时,<Cr> 它会将光标返回到行首并覆盖那里的字符。

换句话说,“Thi”被“end”取代,产生:

    ends is yesterday date:20130605
Run Code Online (Sandbox Code Playgroud)

要执行您似乎正在尝试执行的操作,您的脚本应如下所示:

   variable="text"
   echo "Some sentence $variable"
Run Code Online (Sandbox Code Playgroud)

哪个会输出

   Some sentence text
Run Code Online (Sandbox Code Playgroud)

如果有流浪回车就应该显示为^M中vi(如布鲁斯表示)

解决方案1

删除回车或其他非打印字符的最佳方法是使用tr带有-d选项的命令,它删除单个字符的任何实例,\r它是回车的转义序列:

    tr -d '\r'
Run Code Online (Sandbox Code Playgroud)

这将删除所有回车。在脚本上运行它以删除所有回车实例,然后覆盖原始脚本文件:

    tr -d '\r' yourscript.bash > temp
    mv temp yourscript.bash
Run Code Online (Sandbox Code Playgroud)

解决方案2

或者在vi打开脚本时输入:

    :%s/\r//g
    :wq
Run Code Online (Sandbox Code Playgroud)

要删除文档中的回车,然后保存它。