AutoHotkey v1 变量和字符串

本文参考自:


变量

有关一般说明和变量如何工作的详细信息,请参阅变量。

给变量赋值

要将字符串或数字存储在变量中,有两种方法: 传统方式和表达式。传统方法使用等号运算符(=) 来指定不加引号的原义字符串或用百分号括起来的变量。例如:

1
2
3
MyNumber = 123
MyString = This is a literal string.
CopyOfVar = %Var% ; 和 = 运算符一起使用时,需要使用百分号来获取变量的内容。

与之相比,表达式方法使用冒号等号运算符(:=) 来保存数字,加引号的字符串和其他类型的表达式。以下示例在功能上与前面的例子相同:

1
2
3
MyNumber := 123
MyString := "This is a literal string."
CopyOfVar := Var ; 和前面段落中与其作用相同的语句不同,百分号不和 := 运算符一起使用。

后一种方法由于其更清晰并且与其他许多语言几乎一致的表达式语法成为大多数人的首选方法.

从上面的例子中您可能已经想到了有两种方法来清除变量的内容(即让变量为空):

1
2
MyVar =
MyVar := ""

上面的这对空引号只能和 := 运算符一起使用,因为和 = 运算符一起使用时,则会在变量中保存两个原义的引号字符。

获取变量的内容

如同赋值有两种方法,获取变量的内容也有两种方法: 传统方法和表达式方法。传统方法需要将变量名包围在百分号中来获取变量的内容。例如:

1
2
MsgBox The value in the variable named Var is %Var%.
CopyOfVar = %Var%

与之相比,表达式方法省去了变量名两边的百分号,但原义的字符串必须包围在双引号中。所以,下面的表达式作用等同于上面的例子:

1
2
MsgBox % "The value in the variable named Var is " . Var . "."  ; 使用句点连接(join 拼接) 两个字符串。
CopyOfVar := Var

在上面的 MsgBox 这行,通过使用百分号和空格把参数从传统模式改变为表达式模式。因为所有的命令默认情况下使用传统模式(除了另外注明的那些), 所以这是必须的。

变量的比较

请阅读下面表达式部分中关于不同类型变量比较的重要提示,尤其是关于何时使用小括号的内容。


字符串

保存带有引号的字符串

如果我们想用变量保存一个带有双引号的字符串,需要使用 = 操作符:

1
var = this is " ; 输出的字符串中包含双引号

保存多行字符串

如果我们想要保存多行的字符串,可以使用 () 包含文本内容并使用 =不加 "" 的方式(文本中每行的字符串形式与使用 = 操作符保存单行字符串的形式相同):

1
2
3
4
5
6
7
8
9
10
11
12
var = string

exampleString =
( ; 左括号右侧的字符会被自动忽略,正文从下行开始
multiple
lines ; 该行字符的所有字符(包括空格)会全部输出
; 空行也会如实输出
of
%var%
) ; 右括号左侧不能有其他字符,否则将报错

MsgBox, % exampleString

输出结果截图(第一个非空字符前的空格将忽略):

image-20220723170233064

注意:

  1. 该方式中的 () 必须分别、单独在一行,不能接在其他语句末尾。且文本将严格按照输入形式输出,两个括号之间的空行和空格也会如实输出,但是第一个非空字符前的空格将忽略。
  2. 左括号右侧的字符会被自动忽略,正文从下行开始;右括号左侧不能有其他字符,否则将报错。
  3. 如果需要使用 := 操作符进行多行字符串保存,请使用 `n 转义字符进行换行操作。

AutoHotkey v1 变量和字符串
https://luoyuy.top/posts/b7ed2dc4d9db/
作者
LuoYu-Ying
发布于
2022年7月23日
许可协议