NSIS变量值get set关注点

NSIS variable value get set concerns

好吧,几年来我一直在使用 NSIS 安装程序,我在脚本中将所有变量都视为字符串。我在某个地方读到过这个,NSIS 在内部将所有变量都视为字符串,但不知道确切的事实。

现在我的问题是,每当我们将一些值复制到一些变量中或使用逻辑语句检查变量的值时,理想的方法应该是什么。让我举个例子告诉你我在说什么。

StrCpy  "Some string goes here"
StrCpy  999

${If}  == "String to match here"

${If}  == 999

${If}  == "999"

我想对于 StrCpy $1 情况我没有其他选择,因为我正在将字符串复制到变量中,但是对于情况 StrCpy $2,也许我也可以写 StrCpy $2 "999"If 语句也是如此。

我想知道 NSIS 脚本的正确约定。

是的,在内部所有内容都存储为字符串,并在进行数字运算时将其转换为数字。无法转换为数字的字符串被视为0。

StrCpy 999StrCpy "999" 完全一样,只有当字符串有空格时才需要引号,即使没有空格,编译器也会自动删除引号。这也意味着 ${If} == 999${If} == "999" 是相同的。

比较时,您应该使用 =<><<=>=> 来表示数字,而 ==!= 用于字符串。

${IfThen} 0x29A = 666 ${|} DetailPrint "True" ${|} ; 0x29A is 666 in hex
${IfThen} 0x29A == 666 ${|} DetailPrint "This will never print" ${|}