在单行上回显打印变量

时间:2009-06-24 21:46:34

标签: bash scripting echo

我有两个变量:

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”有什么作用?

3 个答案:

答案 0 :(得分:2)

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

\ r 是回车。

\ n 是新行。

^ M \ r ,因此在写完$ loginIP_BASE后,您处于实际行的第0位。

如果你想删除所有那些^ M,你可以使用sed在vim o中进行:

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

使用dos2unix命令:

struct ResizeableString {
    size_t capacity;
    char * str;
};

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

dos2unix filename