这是怎么回事?
helper.bat
@echo off
echo %1
call:foo %1
goto:eof
:foo
echo %1
goto:eof
像下面这样运行我们的脚本
助手“^^^^”
输出
“^^^^”
“^^^^^^^^”
为什么?我知道“^”符号对于 cmd.exe 来说是特殊的,但是这里发生了什么?函数调用对其有何影响?最佳答案
CALL
在这种情况下非常特殊!
批处理解析器有不同的阶段,在特殊字符阶段未加引号插入符用于转义下一个字符,插入符本身将被删除。
在您的情况下,插入符号被引用,因此它们不会受到影响。
然后,插入符号可以在延迟扩展阶段再次受到影响,但引号在那里没有特殊含义,插入符号仅用于转义感叹号。
通常情况下,延迟阶段后一切都会完成,但如果您使用CALL
,所有插入符都会加倍。
通常这是不可见的,因为 CALL
也会重新启动解析器,并且插入符会在特殊字符阶段再次被删除。
但在你的情况下,它们被引用,因此它们保持双倍。
试试这个
call call call call echo a^^ "b^"
输出
a^ "b^^^^^^^^^^^^^^^^"
解析器的解释见 How does the Windows Command Interpreter (CMD.EXE) parse scripts?
关于windows - bat 文件、函数和插入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701315/