0

我有两个变量:

export portNumber=8888^M
export loginIP_BASE=10.1.172.2^M

我试图将它们都打印在由冒号“:”分隔的一行上。它应该看起来像“10.1.172.2:8888”

echo -n 'Login IP:'
echo -n $loginIP_BASE
echo -n ':'
echo $portNumber

但它会打印这个:

:8888 IP:10.1.172.2

为什么这样做?我怎样才能让它做我想做的事?

此外,这些变量是从另一个文件中预先存在的,所以我自己没有编写它们。“^M”有什么作用?

4

3 回答 3

2

在 Windows 中,一个典型的新行是 \r\n(在 *nix 系统中只是 \n)。

\r是回车。

\n是新行。

^M\r,因此在编写 $loginIP_BASE 之后,您位于实际行的位置 0 。

如果要删除所有这些 ^M ,可以在 vim o 中使用 sed 执行此操作:

sed s/{ctrl+v}{ctrl+m}// file > new_file

({Ctrl+v} 表示按 ctrl 然后按 v)

于 2009-06-24T21:53:40.083 回答
1

该文件已从 Windows 以二进制模式传输,并且在行尾仍然有回车符。

它们是您的^M符号,它们导致文本位置在显示值时返回到行首 - 第一个值末尾的回车符使第二个值再次显示在行首,覆盖第一个值的一部分。

正确的解决方法是使用文本模式传输从 Windows 传输文件,或者在传输文件后对文件运行 dos2unix。(或者如果文件不会再次从 Windows 传输,只需删除^M字符!)

于 2009-06-24T21:47:57.897 回答
0

使用 dos2unix 命令:

dos2unix filename

在 vi 编辑器中删除 Ctrl+M 的另一个技巧:

:%s/^V^M//g
于 2017-10-27T09:40:16.797 回答