我发现使用portableshell.bat
的便携版Strawberry Perl)的批处理文件(#
),我无法理解原因。我在网上搜索过,但似乎没有提到这种用法。我需要模仿批处理文件的功能,但我很谨慎,不知道它究竟做了什么。
这里#
的目的是什么:
set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%
在这里:
if not #%1# == ## "%drivep%\perl\bin\perl.exe" %* & goto END
(这里是整个文件的pastebin,供参考)
答案 0 :(得分:6)
#
字符存在,以便在比较中正确处理null / undefined值,即避免在变量对它们进行求值时与未定义的值进行比较。
此目的几乎可以由任何角色提供(只要在此上下文中没有其他含义)。常见的选择是[]
和{}
。也可以使用""
。
根据评论中的dbenham,使用
""
以外的任何内容通常都是不好的做法。当变量有自己的引号时,引号可能会失败,但当扩展变量不能拥有引号时,引用会很安全,就像展开路径时一样。在所有情况下唯一安全的方法是delayed expansion。此外,没有理由使用
#
或[
或其他任何内容包围变量扩展。对于问题的批处理文件,显然只是为了对称。
可以阅读in this question。
感谢CodeCaster提供的帮助