Linux 字符串在每个变量[Bash]之后再次启动

Linux 字符串在每个变量[Bash]之后再次启动,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我试图在一个字符串中使用多个变量,但在每个变量之后,字符串将再次启动并覆盖开头: #!/bin/bash var1="ABCDEFG" var2="hi" echo "${var1} ${var2}" echo "$var1 $var2" 它应该输出 ABCDEFG hi 但这两种方法都与输出相呼应 hiDEFG 此外,如果我只使用一个变量,并将文本放在变量后,它仍然会覆盖 这里还有一个例子: 这应该输出: helloohaikthxbye 但它输出: byeikthx 我将以开始

我试图在一个字符串中使用多个变量,但在每个变量之后,字符串将再次启动并覆盖开头:

#!/bin/bash
var1="ABCDEFG"
var2="hi"
echo "${var1} ${var2}"
echo "$var1 $var2"
它应该输出

ABCDEFG hi
但这两种方法都与输出相呼应

 hiDEFG
此外,如果我只使用一个变量,并将文本放在变量后,它仍然会覆盖

这里还有一个例子:

这应该输出:

helloohaikthxbye
但它输出:

byeikthx
我将以开始.sh

sudo bash path/bash.sh
但是对于sudo sh来说,它不起作用

我使用Ubuntu 16.04(作为虚拟机)

谢谢
Dennis

它可能是输入字符串中的回车字符

您可以通过管道将
echo
发送到
tr
命令,将其从输出字符串中删除:

 echo "${var1} ${var2}" | tr -d '\r'

这很奇怪。您能否仅从shell(而不是脚本)输出相同的命令。\35;>echo“${var1}${var2}”刚刚试过,在shell中正常工作,输出“ABCDEFG hi”。这很有效,谢谢!!那么,如何删除回车符,还是必须始终使用tr:S进行管道传输?您可以使用sed(GNU-sed)清理脚本:
sed-I'S/\x0D//g'script.sh
 echo "${var1} ${var2}" | tr -d '\r'