我得到了一些我无法理解的格式问题,下面是使用Zsh的简短示例。为什么呢?
$ values=( 300 400 )
$ echo "scale=20; $values[1]-$values[2]" | bc
(standard_in) 1: illegal character: ^M // Why does it not print -100?
$ echo $values // no ^M sign found!
300 400
帮助者问题
- 为什么
5E 4d 0a
,即^M
,是ASCII中的第13个字符?- 为什么结尾符号“0a”显示为点“。”? “。”在Hex中是“2E”。
醇>
答案 0 :(得分:8)
Unix和Windows有不同的行结尾格式。在Unix世界中,行以换行符结尾(LF,ascii char 10)。 Windows以回车符结束行(CR,ascii char 13),后跟换行符。
使用Windows行结尾的文件必须先转换为Unix格式才能使用Unix工具。否则像bc
这样的程序会将CR字符视为垃圾和抱怨,就像您的情况一样。
要将文件转换为Unix格式,您可以使用dos2unix(1)
(如果已安装),或者通过sed 's/^M//g'
交替传递(但不要输入文字^ M - 按Ctrl + V,然后按Ctrl + M)。
那么为什么^M
?好吧,回车是不可打印的字符。它没有可打印的表示。为方便起见,您的终端会将其显示为^M
*。那么为什么当你echo $values
时出现它?不幸的是,命令行参数处理将其剥离,因此您看不到它。
同样为了您的方便,您的终端允许您通过Ctrl + V和Ctrl +某些字母键入不可打印的字符。 Ctrl + V和Ctrl + M将产生一个^M
字符,但是左右移动光标你会看到它跳过整个事物作为单个字符 - 不相同输入^
后跟M
。当你看到^M
时,命令行程序只能看到原始数据,并会看到实际的回车符。
为什么5E 4d 0a,即^ M,ASCII中的第13个字符?
您在hexdump
的输出上运行了echo "^M"
,它产生了三个字符:^
,M
和换行符(LF)。见上文,这与回车不一样!
为什么结尾符号0a显示为。? 。是DEC的2E。十六进制数5E在DEC中为94,在DEC中为4d为77。
Hexdump将所有不可打印的字符显示为.
个字符,包括回车符和换行符。
*为什么M特别?惯例是在ASCII代码中添加64。回车符是ASCII码13(0x0D)。添加64,你得到77(0x4D),这是一个大写M.请参阅this page获取完整列表。
答案 1 :(得分:0)
^ M在一个字符中 - 回车符是dos / windows或ASCII 13字符。似乎你以某种方式损害了你的输入,可能是通过粘贴来自Windows文件或类似的东西......
答案 2 :(得分:0)
如果您通过dos2unix
运行文件,如果您的系统上有该程序,则可能会有更好的运气。
除其他外,dos2unix
会将Windows \ r \ n行结尾转换为Unix风格\ n行结尾。
答案 3 :(得分:0)
帮助者问题的答案
<强>予。为什么5E 4d 0a,即^ M,ASCII中的第13个字符?
换行符是
0a
,请参阅下面的ZyX提供的示例。 rjh澄清了关于第13个问题的一些事情。 “echo -n
阻止echo在其输出结尾添加换行符”。我正在使用Debian。$ echo "scale=20; $values[1]-$values[2]" | hexdump -C 00000000 73 63 61 6c 65 3d 32 30 3b 20 5b 31 5d 2d 5b 32 |scale=20; [1]-[2| 00000010 5d 0a |].| 00000012 xyz@xyz:~$ echo -n "scale=20; $values[1]-$values[2]" | hexdump -C 00000000 73 63 61 6c 65 3d 32 30 3b 20 5b 31 5d 2d 5b 32 |scale=20; [1]-[2| 00000010 5d |]| 00000011
<强> II。为什么结尾符号“0a”显示为点“。”? “。”在Hex中是“2E”。
TODO:有人回答过这个吗?请评论,回答或编辑。
有关示例的信息
ASCII到HEX
`.` is `2E` in Hex `5E` is `^` in Hex `4d` is `M` in Hex
十六进制到ASCII:使用这个看看Hex -things意味着什么
$ echo "^M" | hexdump -C 00000000 5e 4d 0a |^M.| 00000003 $ ascii -x 0 NUL 10 DLE 20 30 0 40 @ 50 P 60 ` 70 p 1 SOH 11 DC1 21 ! 31 1 41 A 51 Q 61 a 71 q 2 STX 12 DC2 22 " 32 2 42 B 52 R 62 b 72 r 3 ETX 13 DC3 23 # 33 3 43 C 53 S 63 c 73 s 4 EOT 14 DC4 24 $ 34 4 44 D 54 T 64 d 74 t 5 ENQ 15 NAK 25 % 35 5 45 E 55 U 65 e 75 u 6 ACK 16 SYN 26 & 36 6 46 F 56 V 66 f 76 v 7 BEL 17 ETB 27 ' 37 7 47 G 57 W 67 g 77 w 8 BS 18 CAN 28 ( 38 8 48 H 58 X 68 h 78 x 9 HT 19 EM 29 ) 39 9 49 I 59 Y 69 i 79 y A LF 1A SUB 2A * 3A : 4A J 5A Z 6A j 7A z B VT 1B ESC 2B + 3B ; 4B K 5B [ 6B k 7B { C FF 1C FS 2C , 3C < 4C L 5C \ 6C l 7C | D CR 1D GS 2D - 3D = 4D M 5D ] 6D m 7D } E SO 1E RS 2E . 3E > 4E N 5E ^ 6E n 7E ~ F SI 1F US 2F / 3F ? 4F O 5F _ 6F o 7F DEL
答案 4 :(得分:0)
我通过从<a href>
上删除了此问题来解决了
~/.gitconfig
出于某种原因并自动将[core]
autocrlf = true
附加到我的vim-plug插件中并破坏了neovim。