我有两个变量:
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”有什么作用?
答案 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