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

时间:2016-01-31 20:14:24

标签: string shell concatenation

我尝试使用shell脚本在sting1和string2之间用空格打印。 定义字符串a,b并使用echo打印它们,其间有空格。但是,a由b替换如下。

a='30 Jan 2016 22:'
b='30 Jan 2016 23:'
echo $a $b

输出:

30 Jan 2016 23:

String1被string2覆盖以显示。但是,同样的命令提示符如下:

$ a='30 Jan 2016 22:'
$ b='30 Jan 2016 23:'
$ echo $a $b
30 Jan 2016 22: 30 Jan 2016 23:

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

1 个答案:

答案 0 :(得分:6)

最可能的原因是文本文件中的DOS换行符。这意味着每行末尾都有一个CRLF,将光标发送回开头。

当UNIX工具解释时,LF(\n)是换行符中唯一涉及的字符,它前面的CR(\r)将成为数据的一部分。

这会使代码的实际行为成为:

a='30 Jan 2016 22:'$'\r'
b='30 Jan 2016 23:'$'\r'
echo $a $b

...首先打印$a然后将光标返回到行首并使用$b覆盖它。