我尝试使用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:
为什么这些行为会有所不同?
答案 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
覆盖它。