作为命令行结果定义的 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)
如果我运行这个脚本:
#!/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)