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
.
来轻松验证这一点
我的 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
.