从命令行定义为结果的 echo 变量将重置光标位置



如果我运行这个脚本:

#!/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.4r,而不仅仅是1.2.3.4

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

试试这个:

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

最新更新