lea*_*g J 0 string shell concatenation
我正在尝试使用shell脚本打印到sting1和string2之间的空格.定义字符串a,b并使用echo打印它们之间的空格.但是,a由b替换如下.
a='30 Jan 2016 22:'
b='30 Jan 2016 23:'
echo $a $b
Run Code Online (Sandbox Code Playgroud)
输出:
30 Jan 2016 23:
Run Code Online (Sandbox Code Playgroud)
String1被string2覆盖以显示.但是,同样的命令提示符如下:
$ a='30 Jan 2016 22:'
$ b='30 Jan 2016 23:'
$ echo $a $b
30 Jan 2016 22: 30 Jan 2016 23:
Run Code Online (Sandbox Code Playgroud)
为什么这些行为有所不同?
最可能的原因是文本文件中的DOS换行符.这意味着您在每行的末尾都有一个CRLF,将光标发送回开头.
当UNIX工具解释时,LF(\n)是换行符中涉及的唯一字符,\r它前面的CR()成为数据的一部分.
这使得代码的实际行为如下:
a='30 Jan 2016 22:'$'\r'
b='30 Jan 2016 23:'$'\r'
echo $a $b
Run Code Online (Sandbox Code Playgroud)
...首先打印$a,然后将光标返回到行的开头并用它覆盖$b.