作为命令行结果定义的 Echo 变量重置光标位置

Echo variable defined as result from command line resets cursor position

如果我运行这个脚本:

#!/bin/bash
HOSTNAME=$(< ds.tmp)
echo "Hello${HOSTNAME}!"

TEST="1.2.3.4"
echo "Hello${TEST}!"

加上ds.tmp的内容只有一个ip地址(比如说1.2.3.4),结果是:

!ello1.2.3.4
Hello1.2.3.4!

所以在我打印一个由 $(...) 赋值的变量后,光标位置被重置并覆盖所有文本。

这是为什么?我到处都找过了,但找不到任何地方的参考...

您的 ds.tmp 文件有 CR-LF 作为换行符。因此,${HOSTNAME} 包含 1.2.3.4\r,而不仅仅是 1.2.3.4

Unix 文本文件应该只使用 LF 作为换行符。使用 dos2unix 修复它。

试试这个:

HOSTNAME=$(tr -d "\r" < ds.tmp)