由命令行定义的回声变量重置光标位置

时间:2015-01-08 09:00:22

标签: bash

如果我运行此脚本:

#!/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!

因此,在打印由$(...)指定的变量后,光标位置将被重置并覆盖所有文本。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

试试这个:

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