Bash 字符串连接产生奇怪的结果

Bash string concatenation producing weird results

我的 bash 代码 file.sh :

username=
pkgpath="/home/${username}_tmp.txt"
echo $username
echo $pkgpath

现在 运行 带有命令 bash file.sh abc 的脚本应该产生结果:

abc
/home/abc_tmp.txt

但我得到的输出是:

abc
_tmp.txtc

有人可以解释为什么会出现这种行为以及如何获得预期的结果吗?

编辑
我想提一下,使用 pkgpath="/home/${username}" 给我 /home/abc(期望)但是 运行 pkgpath="${username}_tmp.txt" 给我 _tmp.txt(奇怪)。

当您 运行 命令 bash file abc 时,您似乎以某种方式在 abc 之后插入了回车 return 字符。罪魁祸首可能是您的终端,或者您正在复制粘贴命令并在没有意识到的情况下包含 ^M

所以 bash 在第二行输出的实际上是 /home/abc^M_tmp.txt,它被渲染为 _tmp.txtc。您可以通过将命令的输出传送到 less -R.

来轻松验证这一点