打印两个变量 - 从脚本运行时只打印第二个变量

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)

为什么这些行为有所不同?

Cha*_*ffy 6

最可能的原因是文本文件中的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.