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)
回车将光标放回行首。您的输出字符串是:
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)
要删除文档中的回车,然后保存它。