背景
举例:aaa^M
其中^M是一个dos格式字符,在shell终端里,是这么打出来的“ctrl+v,然后enter回车”。
在shell里,
mv aaa^M aaa;
重命名操作成功。
在perl里,
`mv aaa^M aaa`;
重命名操作无法成功。会报错。怎么解决?
解决办法
[qilei@localhost test]$ mkdir aaa^M
[qilei@localhost test]$ mkdir aaa1^M
[qilei@localhost test]$ mkdir aaa2^M
[qilei@localhost test]$ ls
1.pl aaa? aaa1? aaa2?
利用下述perl脚本,发现只有
rename 'aaa2^M' , 'aaa2';
能达到要求。
#!/usr/bin/perl
use strict;
use warnings;
`mv aaa^M aaa`;
system 'mv aaa1^M aaa1';
rename 'aaa2^M' , 'aaa2';
再次强调,其中^M是一个dos格式字符,在shell终端里,是这么打出来的“ctrl+v,然后enter回车”。
利用ls命令会把特殊字符^M显示为?;如果cd TAB键不全,会发现目录仍然是aaa^M。
^M在linux的输入方法
经过实践:
1. 在vim里,是ctrl+v,然后enter回车。
2. 在bash终端里,是ctrl+v,然后enter回车。
3. 在tcsh终端里,是ctrl+v,然后ctrl+enter(即ctrl+回车)。