2017-08-02 35 views
1

我的目标是连接两个字符串。bash中的字符串连接3.2.57(macOS)

这里是我的bash脚本的复制粘贴:

str1="Hello" 
str2="World" 
str3=$str1$str2 
echo $str3 

预期的输出是HelloWorld但我得到World代替。

当我在终端中运行它时,它工作正常。

下面是输出的,当我在我的脚本运行cat -v

str1="Hello"^M 
str2="World"^M 
str3=$str1$str2^M 
echo $str3^M 

我这么想吗?

+0

'str1'的定义是否以一个windows行结束符结束? – choroba

回答

4

这可能是因为您在$str1末尾有回车(\r)。我得到以下相同的输出:

#!/bin/bash 
str1="Hello"$'\r' 
str2="World" 
str3=$str1$str2 
echo $str3 

它通常发生在MSWin机器上创建脚本时。

它打印出你好,但是然后\r将光标移回到行的开头,并覆盖Hello with World。

您可以通过运行十六进制转储或cat -v来验证它。

+0

谢谢,请参阅'cat -v'输出的更新问题。 –

+1

@EtienneMartin:是的,就是这样。删除回车。 – choroba

+0

你是男人@choroba,在我的编辑器中将行结尾改为unix修复了这个问题。 –