引用的转义使用"\",指令的转义也是使用"\"。但是,指令的转义要比引用的转义复杂很多。例如:
#
if
($foo)
Go !
#end
$foo为true,输出Go ! ;否则不输出任何内容。
Go !
#end
$foo为true,输出Go ! ;否则不输出任何内容。
使用转义:
\#
if
( $foo )
Go !
\#end
Go !
\#end
此时, " \ " 和 " # " 结合,从而破坏了原本的# if (),而$foo作为判断条件,也不会被解析。
所以上面这段代码,无论$foo是true还是false,结果都是
#
if
( $foo )Go !
#end
这类似于使用了#literal() ... #end指令。
如果使用两个"\":
\\#
if
( $foo )
Go !
\\#end
Go !
\\#end
首先,#if前面的两个
假定$foo是true,那么会输出
"
Go!
"
,并且是紧跟在刚才的
"
\
"
后面(因为没有
换号符)。
#
if
($foo)和#end之间的内容,都会输出,包括#end前面的两个
"
\
"
,
它们会被解析为一个
"
\
"
。如果$foo是false,仅仅输出一个"\",而"Go!"以
及后面下一行的"\"不会输出。
"
\
"
结合,变为一个
"
\
"
输出。然后#
if
($foo)正常处理。
还有一种情况需要说明:
\\\#
if
($foo)
Go !
\\#end
Go !
\\#end
前两个 " \ " 被解析为 " \ " ,第三个 " \ " 和后面的 " # " 解析为 " # " ,# if ()被破坏。所以输出就是
\#
if
($foo)
Go !
\......
注意最后那里,有一个合法的#end,但是它是多余的,所以这一段代码是会报错的。
Go !
\......
注意最后那里,有一个合法的#end,但是它是多余的,所以这一段代码是会报错的。