关于行末转义符的个人猜想
看了楼主的教程,对于多行注释又学到了一招,以前只知道利用goto来进行多行注释。呵呵,感谢楼主为知识传播所付出的辛劳!
此后看了各位朋友们对行末转义符的工作原理探讨,我也同楼主一样对行末转义符后连续空两行便不再工作感到困惑,另Jookin兄所说的行末是换行回车做为结束符号是不对的。因为我用16进制编辑器打开任一Windows中的文本类型文件(txt,cmd,vbs……)均看到行结束符号是0D 0A,即回车换行!
受此启发,我将以下代码的输出重定向到一文本文件中后用UE打开查看其16进制时发现了一个有趣的现象。- @echo off
- echo 1st:
- echo a^
- b
- echo.
- echo.
- echo.
- echo 2nd:
- echo a^
-
- b
- echo.
- echo.
- echo 3rd:
- echo a^
-
-
- b
- echo.
- echo.
- echo.
- echo 4th:
- echo a^
-
- ^
-
- b
复制代码 代码中之所以要增加若干空行是为了在16进制模式下各情况的输出结果能对齐,下面给出输出结果及在UE中打开查看其16进制的图片。
请大家注意看其16进制模式。
情况1:a与b首尾相接。从结果看第3行的转义符将其后的回车换行符“删除”了。b后面的第一对回车换行是输出时正常产生的,后面的三对则是三条echo.产生的。
情况2:a的后面是0A,所以输出结果表现为a,b各占一行。这就是说第9行的转义符将原来总共2对即4个(0D 0A 0D 0A)回车换行符“删除”了前三个。b后面的三对回车换行符解释同情况1。最后的空格(20)是我特意在“3rd”的前面加上的,以便三种情况对齐后分析。
情况3:a的后面同样是0A,至于后面的4对回车换行符则是正常输出及第19、20、21行产生的。第17为空不会产生任何输出,第18行执行出错,也不会在此文件中产生输出。是不是也同情况2一样第15行的转义符将其后的4个回车换行符“删除”了三个,只留下最后一个呢?
至此,我得出这样一个猜想:行末转义符将其后的回车换行符整体转义形成一个新的“转义”符,这个新的“转义”符对其后的回车符进行“转义”时将其“转义”为空(不是ASCII码为0的那个空,而是什么都没有的空。通俗地讲就是把回车符吃了,然后消失在人海。),或者说对其后的一对回车换行符“转义”为换行符(0A),而其它字符则原样输出。
情况4验证了我的猜想。a后面的两个换行符(0A)分别由23、25行的转义符产生。
以上猜想纯属个人见解,不对之处还请大家指正。 |