mec*_*ynx 3 windows batch-file
我遇到了一个批处理文件(portableshell.bat来自草莓Perl的便携版)使用#,我无法理解为什么.我在网上搜索过,但似乎没有提及这种用法.我需要模仿批处理文件的功能,但我很谨慎,不知道它究竟做了什么.
这里的目的是什么#:
set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%
Run Code Online (Sandbox Code Playgroud)
和这里:
if not #%1# == ## "%drivep%\perl\bin\perl.exe" %* & goto END
Run Code Online (Sandbox Code Playgroud)
(这是整个文件的pastebin,供参考)
该#字符存在,以便在比较中正确处理null/undefined值,即避免在变量对它们进行求值时与未定义值进行比较.
这个目的几乎可以由任何角色提供(只要它在这种情况下没有其他含义).常见的选择是[]和{}.""也可以使用.
据dbenham在评论中说,使用其他任何东西
""一般都是不好的做法.当变量有自己的引号时,引号可能会失败,但当扩展变量不能拥有引号时,引用会很安全,就像展开路径时一样.在所有情况下安全的唯一方法是延迟扩张.此外,没有理由使用
#或[使用其他任何内容包围变量扩展.在问题的批处理文件的情况下,它显然只是为了对称.
关于这一点可以在这个问题中阅读.
感谢CodeCaster的帮助
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |