hhh*_*hhh 1 unix windows format ascii zsh
我得到了一些我无法理解的格式问题,下面是一个使用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
Run Code Online (Sandbox Code Playgroud)
帮助者的问题
- 为什么
5E 4d 0a
,即^M
ASCII中的第13个字符?- 为什么结尾符号"0a"显示为点"."?"." 十六进制是"2E".
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"
,生成三个字符:a ^
,a M
和换行符(LF).见上文,这与回车不一样!
为什么结尾符号0a显示为.?.是DEC的2E.十六进制数字5E在DEC中为94,在DEC中为4d为77.
Hexdump将所有不可打印的字符显示为.
字符,包括回车符和换行符.
*为什么M特别?惯例是在ASCII代码中添加64.回车符是ASCII码13(0x0D).添加64并获得77(0x4D),这是一个大写M.请参阅此页面以获取完整列表.
归档时间: |
|
查看次数: |
5274 次 |
最近记录: |