精华内容
下载资源
问答
  • Matlab入门----工作区中的变量

    万次阅读 2018-07-30 07:27:59
    1.工作区包含在 MATLAB中创建或从数据文件或其他程序导入的变量,使用 whos 可以查看工作区的内容 工作区的窗口也会显示当下所有变量 2.工作区变量的保存 退出 MATLAB 后,工作区变量不会保留。使用 save...

    1.工作区包含在 MATLAB中创建或从数据文件或其他程序导入的变量,使用 whos 可以查看工作区的内容

    工作区的窗口也会显示当下所有变量

    2.工作区变量的保存

    退出 MATLAB 后,工作区变量不会保留。使用 save 命令可以保存数据

    这是因为当前路径下没有以管理员身份运行,权限不够,将工作目录改成存文件的目录就可以了:

    save test.mat

    系统会使用 .mat 扩展名将工作区保存在当前工作文件夹中一个名为 MAT 文件的压缩文件中

    使用 load 将 MAT 文件中的数据还原到工作区

    load test.mat

     

    展开全文
  • 常用的Jenkins变量

    千次阅读 2019-01-25 22:24:33
    2.SVN_REVISION:当前工作区的Subversion版本号; 3.SVN_URL:当前工作区的Svn URL; 4.BUILD_NUMBER:当前构建的编号,例如“4674”等; 5.BUILD_ID:当前构建的版本ID,与构建的BUILD_NUMBER相同; 6.BUILD_...

    一、常用Jenkins变量

    1.WORKSPACE:当前Job构建目录的绝对路径;
    2.SVN_REVISION:当前工作区的Subversion版本号;
    3.SVN_URL:当前工作区的Svn URL;
    4.BUILD_NUMBER:当前构建的编号,例如“4674”等;
    5.BUILD_ID:当前构建的版本ID,与构建的BUILD_NUMBER相同;
    6.BUILD_DISPLAY_NAME:当前版本的显示名称,默认为“# 4674”,即BUILD_NUMBER;
    7.JOB_NAME:即此版本的项目名称,例如“foo”或“foo / bar”;
    8.JENKINS_HOME:Jenkins用于存储数据的主节点上分配的目录的绝对路径;
    9.JENKINS_URL:Jenkins的完整URL,如http:// server:port / jenkins /(注意:仅在系统配置中设置Jenkins URL时可用);
    10.BUILD_URL:此版本的完整URL,例如http:// server:port / jenkins / job / foo / 15 /(必须设置Jenkins URL);
    11.JOB_URL:该作业的完整URL,例如http:// server:port / jenkins / job / foo /(必须设置Jenkins URL);
    12.BRANCH_NAME:对于多分支项目,这将被设置为正在构建的分支的名称,例如,如果您希望从master部署到生产环境而不是从feature分支部署;如果对应某种更改请求,则该名称通常是任意的(请参阅下面的CHANGE_ID和CHANGE_TARGET);
    13.CHANGE_ID:对于与某种更改请求相对应的多分支项目,这将被设置为更改ID,例如拉取请求编号(如果支持);其他未设置;
    14.CHANGE_URL:对于与某种更改请求相对应的多分支项目,这将被设置为更改URL(如果支持);其他未设置;
    15.CHANGE_TITLE:对于与某种更改请求相对应的多分支项目,这将被设置为更改的标题(如果支持);其他未设置;
    16.CHANGE_AUTHOR:对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的用户名(如果支持);其他未设置;
    17.CHANGE_AUTHOR_DISPLAY_NAME:对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的人名(如果支持);其他未设置;
    18.CHANGE_AUTHOR_EMAIL:对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的Email地址(如果支持);其他未设置;
    19.CHANGE_TARGET:对于与某种更改请求相对应的多分支项目,这将被设置为合并到的目标或者基础分支(如果支持);其他未设置;
    20.JOB_BASE_NAME:此构建的项目的短名称剥离文件夹路径,例如“bar / foo”的“foo”;
    21.BUILD_TAG:“jenkins - $ {JOB_NAME} - $ {BUILD_NUMBER}”的字符串。 JOB_NAME中的所有正斜杠(/)都用破折号( - )替换。方便地放入资源文件,jar文件等,以便于识别。
    22.EXECUTOR_NUMBER:唯一编号,用于标识执行此构建的当前执行程序(在同一台计算机的执行程序中)。这是您在“构建执行程序状态”中看到的数字,但数字从0开始,而不是从1开始。
    23.NODE_NAME:如果构建在代理上,则代理的名称; 如果在主版本上运行,则为“MASTER”;
    24.NODE_LABELS:节点分配的空白分隔的标签列表。
    25.GIT_COMMIT:The commit hash being checked out;
    26.GIT_PREVIOUS_COMMIT:The hash of the commit last built on this branch, if any;
    27.GIT_PREVIOUS_SUCCESSFUL_COMMIT:The hash of the commit last successfully built on this branch, if any;
    28.GIT_BRANCH:远程分支名称,如果有的话;
    29.GIT_LOCAL_BRANCH:本地分支名称,如果有的话;
    30.GIT_URL:远程git仓库的URL。如果有多个,将会是GIT_URL_1,GIT_URL_2等;
    31.GIT_COMMITTER_NAME:配置的Git提交者名称(如果有的话);
    32.GIT_AUTHOR_NAME:配置的Git作者姓名(如果有的话);
    33.GIT_COMMITTER_EMAIL:配置的Git提交者电子邮件(如果有的话);
    34.GIT_AUTHOR_EMAIL:已配置的Git作者电子邮件(如果有);
    35.JOB_DESCRIPTION:显示项目描述;
    36.CAUSE: 显示谁、通过什么渠道触发这次构建;
    37.CHANGES:显示上一次构建之后的变化;
    showPaths 如果为 true,显示提交修改后的地址。默认false。
    showDependencies 如果为true,显示项目构建依赖。默认为false
    format 遍历提交信息,一个包含%X的字符串,其中%a表示作者,%d表示日期,%m表示消息,%p表示路径,%r表示版本。注意,并不是所有的版本系统都支持%d和%r。如果指定showPaths将被忽略。默认“[%a] %m\\n”。
    pathFormat 一个包含“%p”的字符串,用来标示怎么打印路径。
    
    38.PROJECT_NAME:显示项目的全名
    39.PROJECT_DISPLAY_NAME:显示项目的显示名称。(见AbstractProject.getDisplayName)
    40.SCRIPT:从一个脚本生成自定义消息内容。自定义脚本应该放在"$JENKINS_HOME/email-templates"。当使用自定义脚本时会默认搜索$JENKINS_HOME/email-templatesdirectory目录。其他的目录将不会被搜索。
    script 当其使用的时候,仅仅只有最后一个值会被脚本使用(不能同时使用script和template)。
    template常规的simpletemplateengine格式模板。
    41.BUILD_LOG_MULTILINE_REGEX:按正则表达式匹配并显示构建日志。
    regex java.util.regex.Pattern 生成正则表达式匹配的构建日志。无默认值,可为空。
    maxMatches 匹配的最大数量。如果为0,将匹配所有。默认为0。
    showTruncatedLines 如果为true,包含[...truncated ### lines...]行。默认为true。
    substText 如果非空,就把这部分文字(而不是整行)插入该邮件。默认为空。
    escapeHtml 如果为true,格式化HTML。默认为false。
    matchedSegmentHtmlStyle 如果非空,输出HTML。匹配的行数将变为<b style=”your-style-value”> html escaped matched line </b>格式。默认为空。
    42. BUILD_LOG:显示最终构建日志。
    maxLines 日志最多显示的行数,默认250行。
    escapeHtml 如果为true,格式化HTML。默认false。
    43.PROJECT_URL:显示项目的URL地址。
    44.BUILD_STATUS:显示当前构建的状态(失败、成功等等)
    45.BUILD_URL:显示当前构建的URL地址。
    46.CHANGES_SINCE_LAST_SUCCESS:显示上一次成功构建之后的变化。
    reverse在顶部标示新近的构建。默认false。
    format遍历构建信息,一个包含%X的字符串,其中%c为所有的改变,%n为构建编号。默认”Changes for Build #%n\n%c\n”。
    showPaths,changesFormat,pathFormat分别定义如${CHANGES}的showPaths、format和pathFormat参数。
    47.CHANGES_SINCE_LAST_UNSTABLE:显示显示上一次不稳固或者成功的构建之后的变化。
    reverse在顶部标示新近的构建。默认false。
    format遍历构建信息,一个包含%X的字符串,其中%c为所有的改变,%n为构建编号。默认”Changes for Build #%n\n%c\n”。
    showPaths,changesFormat,pathFormat分别定义如${CHANGES}的showPaths、format和pathFormat参数。
    48.ENV:显示一个环境变量。
    var– 显示该环境变量的名称。如果为空,显示所有,默认为空。
    49.FAILED_TESTS:如果有失败的测试,显示这些失败的单元测试信息。
    50.HUDSON_URL:不推荐,请使用$JENKINS_URL
    51.JELLY_SCRIPT:从一个Jelly脚本模板中自定义消息内容。有两种模板可供配置:HTML和TEXT。你可以在$JENKINS_HOME/email-templates下自定义替换它。当使用自动义模板时,”template”参数的名称不包含“.jelly”。
    template模板名称,默认”html”。
    52.TEST_COUNTS:显示测试的数量。
    var– 默认“total”。
    total -所有测试的数量。
    fail -失败测试的数量。
    skip -跳过测试的数量。
    

    二、使用方式

    1.在Execute shell、Execute Windows batch command中使用:
    Windows:%BUILD_NUMBER%        %变量名%
    Linux:${BUILD_NUMBER} ,也可以直接使用$BUILD_NUMBER
    
    2.自定义的参数化(Parameter)在调用时可以直接 用 $参数名,比如调用这个时直接 $endPoint
    
    3.在Maven或者Ant中使用
    Maven:直接使用:${env.WORKSPACE} 
    Ant:需要增加<property environment="env"/>节点,再使用${env.WORKSPACE} 
    
    
    展开全文
  • ahk变量与内置变量

    千次阅读 2017-02-09 10:14:35
    变量的类型: AutoHotkey 中没有明确的变量类型. 然而, 只包含数字 (可以含有小数点) 的变量进行数学运算或比较时, 会被自动转换为数值. (为了提高性能, 在内部会对数字进行缓存以避免与字符串之间的转换.) 变量的...
    
    

    变量

    变量的类型: AutoHotkey 中没有明确的变量类型. 然而, 只包含数字 (可以含有小数点) 的变量进行数学运算或比较时, 会被自动转换为数值. (为了提高性能, 在内部会对数字进行缓存以避免与字符串之间的转换.)

    变量的作用域和声明: 除了函数中的 局部变量, 其他所有变量都是全局的; 即可以在脚本的任意位置读取或修改它们的内容. 除了在函数页面注明的情况,变量都是不需要声明的;使用它们的时候它们就产生了(每个变量初始为空).

    变量的名称: 变量名不区分大小写 (例如, CurrentDate 等同于 currentdate). 变量名可以含有多达 253 个字符, 并且可以由字母, 数字以及后面的标点组成: # _ @ $

    考虑到命名的惯例, 通常在命名变量时最好仅使用字母, 数字和下划线 (例如: CursorPositionTotal_Items 和 entry_is_valid). 这样的风格可以让熟悉其他计算机语言的人更容易理解您的脚本. 而且, 如果您在 AutoHotkey 和其他语言中使用相同的风格, 您会发现能更容易重新读懂自己的脚本.

    尽管变量名可以完全由数字组成, 但通常这样的名称仅用于 传入的命令行参数. 这样数值名称的变量不能用在 表达式 中, 因为它们会被看成是数字而不是变量.

    因为单词 ANDOR 和 NOT 作为表达式的 运算符 使用, 所以通常不应该把它们用作变量名称. 在表达式中使用这样的名称会无法正确计算.

    给变量赋值: 要把字符串或数字保存到变量中, 有两种方法: 传统方法和表达式方法. 传统方法使用 等号运算符 (=) 来指定 没有加引号的 原义字符串或包围在百分号中的变量. 例如:

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

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

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

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

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

    MyVar =
    MyVar := ""

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

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

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

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

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

    在上面的 MsgBox 这行, 通过使用百分号和空格把参数从传统模式改变为表达式模式. 因为所有的命令默认情况下使用传统模式 (除了另外注明的那些), 所以这是必须的. 不过, 某些命令的特定参数已注明接受表达式, 此时前导的百分号可以省略. 例如, 下面的所有语句都是等效的, 因为 Sleep 的首个参数可以是表达式:

    Sleep MillisecondsToWait
    Sleep %MillisecondsToWait%
    Sleep % MillisecondsToWait

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

    表达式

    表达式用来对一系列变量, 原义字符串和/或原义数字执行一个或多个操作.

    表达式中的变量名称不用包围在百分号中(伪数组和其他的双重引用除外).所以, 为了与变量区别, 原义的字符串必须用双引号包围. 例如:

    if (CurrentSetting > 100 or FoundColor <> "Blue")
        MsgBox The setting is too high or the wrong color is present.

    在上面的例子中, 因为 "Blue" 是原义字符串, 所以包围在双引号中. 要在原义字符串中包含真实的引号字符,请指定两个连续的引号,如同此例中的两次演示:"She said, ""An apple a day.""".

    重要说明:含有表达式的 if 语句与传统的 if 语句(例如 If FoundColor <> Blue),可以通过单词"if"后是否有开括号来区分.尽管通常把整个表达式包围在括号中,不过也可以写成这样:if (x > 0) and (y > 0).此外, 如果单词 "if" 后的第一项为 函数调用 或类似 "not" 或 "!" 这样的运算符时, 开括号可以完全省略.

    空字符串: 要在表达式中使用空字符串, 请指定一对空引号. 例如,当 MyVar 非空时语句 if (MyVar <> "") 的结果为真.然而, 在 传统 if 语句 中, 一对空引号会被视为原义的字符串. 例如,当 MyVar 仅包含一对真实的引号时语句 if MyVar = "" 结果为真.因此,要使用传统的 if 语句判断变量是否为空,则需要让 = 或 <> 的右侧为空,例如:if Var =.

    相关提示,任何无效的表达式例如 (x +* 3) 会产生空字符串.

    保存表达式的结果: 要把结果赋值给变量, 请使用 := 运算符. 例如:

    NetPrice := Price * (1 - Discount/100)

    布尔值: 要计算表达式结果为真还是假时 (例如 IF 语句), 表达式结果为空或零被视为假, 而其他所有结果都视为真. 例如,仅当 ItemCount 为空或 0 时 if ItemCount 的结果才为假.类似地,表达式 if not ItemCount 将产生相反的结果.

    像 NOT/AND/OR/>/=/< 这些运算符的运算会自动产生真值或假值的结果: 真值时结果为 1 而假值时为 0. 例如, 在下面的表达式中, 如果有一个条件为真则变量 Done 被赋值为 1:

    Done := A_Index > 5 or FoundIt

    如上面提示的那样, 简单地置空变量或为其赋值为 0 可以让它假值. 利用这种特性,可以使用简写语句 if Done 来检查变量 Done 是真还是假.

    单词 true 和 false 是值分别为 1 和 0 的内置变量. 使用它们可以增加脚本的可读性, 例如:

    CaseSensitive := false
    ContinueSearch := true

    整数和浮点数: 在表达式中, 含有小数点的数字被视为浮点数; 否则视为整数. 对于大多数运算符(例如加法和乘法),只要其中的一个输入是浮点数,那么结果也将是浮点数.

    不论在表达式中还是在表达式外的其他地方, 整数都可以表示成十六进制或十进制. 十六进制数必须以前缀 0x 开头. 例如,Sleep 0xFF 等同于 Sleep 255.在 v1.0.46.11+,可以识别用科学计数法表示的浮点数;但只有在它们含有小数点时才行(例如 1.0e4 和 -2.1E-4).

    强制使用表达式: 通过在表达式前加上百分号和空格或 tab, 能把表达式用在不直接支持表达式的参数中 (除了像 StringLen 的 OutputVar 和 InputVar 的那些参数). 这种技巧常用来访问 数组. 例如:

    FileAppend, % MyArray%i%, My File.txt
    FileAppend, % MyPseudoArray%i%, My File.txt
    MsgBox % "The variable MyVar contains " . MyVar . "."
    Loop % Iterations + 1
    WinSet, Transparent, % X + 100
    Control, Choose, % CurrentSelection - 1

    表达式中的运算符

    优先级相同的运算符例如乘 (*) 和除 (/) 按从左到右的顺序计算, 下面另行注明的除外. 与之相比, 低优先级的运算符例如加 (+) 在更高优先级的运算符例如 (*) 之后 计算. 例如, 3 + 2 * 2 等价于 3 + (2 * 2). 使用括号可以改变优先级, 例如: (3 + 2) * 2

    除了下面注明的情况, 其他时候在数学运算中包含的任何空值 (空字符串) 或非数字值包括算术运算符中的都 不会 被假定为零. 而是被视为错误, 这将导致那部分表达式的计算结果为空字符串. 例如, 如果变量 X 为空, 那么表达式 X + 1 会返回空值而不是 1.

    For historical reasons, quoted numeric strings such as "123" are always considered non-numeric when used directly in an expression (but not when stored in a variable or returned by a function). This non-numeric attribute is propagated by concatenation, so expressions like "0x" nalso produce a non-numeric value (even when n contains valid hexadecimal digits). This problem can be avoided by assigning the value to a variable or passing it through a function like Round(). Scripts should avoid using quote marks around literal numbers, as the behavior may change in a future version.

    表达式运算符 (按优先级降序排列)

    %Var%

    如果表达式中的变量包围在百分号中 (例如 %Var%), 不管此变量 包含 什么内容都会被假定为另一个变量 (如果不存在这样的变量, 那么 %Var% 会被解析为空字符串) 的名称或部分名称. 这种方法常用来引用 伪数组 元素, 例如:

    Var := MyArray%A_Index% + 100

    为了向后兼容, 注明了 "可以使用表达式" 的命令参数把百分号中的孤立名称 (例如 %Var%, 但不是 Array%i%) 当作其两边的百分号不存在一样. 通过把引号包围在括号中可以避免这种情况;例如 Sleep (%Var%).

    [AHK_L 52+]: 除了普通变量, %Var% 还可以解析为 环境变量, 剪贴板或任何的 保留/只读的变量. 在修订号 52 之前, 在这些情况中 %Var% 会被当成空字符串.

    x.y [AHK_L 31+]: 对象访问. 从对象 x 中取值或为其存入值或调用其方法, 此处 y 是个原义值. 请参阅 对象语法.
    new [v1.1.00+]:基于其他对象创建新对象.例如,x := new y 通常等价于 x := {base: y}.new 后应该跟着变量或 GlobalClass.NestedClass 形式的简单类名,还可以像 x := new y(z) 那样加上可选参数(其中 y 是变量而非函数名).更多细节请参阅自定义对象.
    ++
    --
    前置和后置的自增/自减. 从变量中增加或减去 1 (但在 1.0.46 之前的版本中, 只有把它们放在一行中才能用; 此行中不能使用其他运算符). 运算符可以放在变量名的前面或后面. 如果放在变量名的 前面, 会立即执行运算并把结果用于后面的运算. 例如,Var := ++X 让 X 自增后才把它的值赋给 Var.相反地, 如果运算符放在变量名的 后面, 在后面的运算使用了变量 之后 才对其进行自增运算. 例如,Var := X++ 把 X 的当前值赋给 Var 后才进行自增.由于向后兼容性,仅当空变量在单独一行时运算符 ++ 和 -- 才把它们视为零;例如 y:=1, ++x 和 MsgBox % ++x 当 x 为空时结果都为空.
    ** . 底数和指数都可以为小数. 如果指数为负数, 即使底数和指数都为整数, 结果也会被格式化为浮点数. 因为 ** 的优先级高于一元负号,所以 -2**2 的计算过程和 -(2**2) 一样且得到结果 -4.因此,要让负号的优先级高于幂运算,需要把它们包围在括号中,例如 (-2)**2.注意:不支持底数为负数且指数为分数的情况,例如 (-2)**0.5;它会产生空字符串.但 (-2)**2 和 (-2)**2.0 都是支持的.
    -
    !
    ~
    & *

    一元负号 (-):尽管它和减运算符使用相同的符号,但一元负号仅应用于单项或子表达式,如此例中的两次演示:-(3 / -x).相关提示, 表达式中的任何一元正号 (+) 都会被忽略.

    逻辑非 (!): 如果运算数为空或 0, 那么逻辑非的结果为 1, 这表示 "真". 否则, 结果为 0 (假). 例如:!x or !(y and z).注意: 单词 NOT 和 ! 含义相同, 但 ! 优先级更高. 在 v1.0.46+,允许使用连续的一元运算符,例如 !!Var,因为它们是按从右到左的顺序计算.

    按位非 (~): 此运算符对运算数按位取反. 如果运算数为浮点数, 则在计算前把它截取成整数. 如果运算数介于 0 和 4294967295 (0xffffffff) 之间, 那么它会被视为 无符号的 32 位值. 否则, 它被视为 有符号的 64 位值. 例如,~0xf0f 计算结果为 0xfffff0f0(4294963440).

    取址(&):&MyVar 获取 MyVar 的内容的内存地址,此地址一般和 DllCall 结构一起使用.同时 &MyVar 也禁用了此变量中的二进制数的缓存,如果它经常用于数学或数值比较,那么这会拖慢其性能.每当变量的地址改变时会重新启用它的缓存 (例如使用 VarSetCapacity()).

    解除引用(*):*Expression 假定 Expression 解析为数值的内存地址;它会获取在一个介于 0 和 255 之间的数字表示的内存地址中一个字节的内容(地址为 0 时获取的结果也总是 0;但应该避免使用其他任何无效地址,因为它可能会让脚本崩溃).然而, 使用 NumGet() 获取二进制数通常会更好.

    *
    /
    //

    乘 (*): 如果两个输入都为整数, 则结果为整数; 否则结果为浮点数.

    真除 (/): 与 EnvDiv 不同, 即使两个输入都是整数, 真除的结果也为浮点数. 例如,3/2 结果为 1.5 而不是 1,而 4/2 结果为 2.0 而不是 2.

    向下舍除 (//): 如果两个输入都是整数, 那么双斜线运算符使用高效的整数除法. 例如,5//3 结果为 1 而 5//-3 结果为 -1.如果任何一个输入为浮点数, 则执行浮点除法并把结果往下取整到最近的整数. 例如,5//3.0 结果为 1.0 而 5.0//-3 结果为 -2.0.尽管浮点除法的结果为整数, 但它被保存为浮点格式, 以便其他使用者能使用浮点格式. 关于求模运算,请参阅 mod().

    *= 和 /= 运算符是用变量的值乘以或除以另一个值的一种简写形式. 例如,Var*=2 和 Var:=Var*2 会得到相同的结果(不过前者执行的更好).

    除数为零时结果为空 (空字符串).

    +
    -

    加 (+) 和 减 (-). 相关提示, += 和 -= 运算符是从变量中增加或减少值的一种简写形式. 例如,Var+=2 和 Var:=Var+2 会得到相同的结果(不过前者执行的更好).同样地,使用 Var++,Var--,++Var 或 --Var 可以让变量增加或减小 1.

    <<
    >>
    按位左移 (<<) 和 右移 (>>). 用法示例:Value1 << Value2.任何浮点数在计算前会被截取成整数. 左移 (<<) 相当于把 Value1 乘以 "2 的 Value2 次幂". 右移(>>)相当于把 Value1 除以"2 的 Value2 次幂"并把结果往下取整到最近的整数;例如,-3>>1 结果为 -2.
    &
    ^
    |
    按位与 (&)按位异或 (^) 和 按位或 (|). 这三个运算符中, & 优先级最高而 | 优先级最低. 任何浮点数在计算前会被截取成整数.
    .

    连接. 句点运算符用于把两个项目组合成单个字符串 (在句点的两边至少必须有一个空格). 省略句点也可以达到相同的目的(除非表达式中有不明确的关系,例如 -y,或在右边的项目含有前导的 ++ 或 -- 运算符). 省略句点时,合并的两个项目间应该至少有一个空格.
    示例(表达式方法): <c6>Var := "The color is " . FoundColor
    示例(传统方法):Var = The color is %FoundColor%

    还可以用来连接子表达式. 例如:Var := "The net price is " . Price * (1 - Discount/100).

    以句点 (或其他任何运算符) 开始的行会自动 附加到 前一行的末尾.

    ~= [AHK_L 31+]: 对 RegExMatch 的简写. 例如,"abc123" ~= "\d" 会设置 ErrorLevel 为 0 并得到结果 4(首个数字的位置).在 v1.1.03 之前, 此运算符和 等号 (=) 运算符优先级相同, 但没有完全说明.
    >   <
    >= <=
    大于(>)小于 (<)大于或等于 (>=), 和 小于或等于 (<=). 如果某个输入不是数字, 则按字母顺序比较 (加了引号的原义字符串例如 "55" 在这种情况中总是被当成是非数值的). 仅当 StringCaseSense 打开时, 比较才区分大小写. 另请参阅: Sort
    =
    ==
    <> !=
    等号 (=)区分大小写等于 (==) 和 不等于(<> 或 !=). 运算符 != 和 <> 功能完全相同. 当两个输入都是数字时, 运算符 == 和 = 是一样的, 当某个输入不是数字时, == 总是区分大小写, 而 = 总是不区分大小写(不区分大小写的方法由 StringCaseSense 决定). 与之相比, <> 和 != 都遵循 StringCaseSense. 注意: 加了引号的字符串例如 "55" 在这种情况下总是被当成非数值的.
    NOT 逻辑非. 除了优先级较低外, 其他的与 ! 运算符相同. 例如, not (x = 3 or y = 3) 等同于 !(x = 3 or y = 3).
    AND
    &&
    这两个运算符都是 逻辑与. 例如:x > 3 and x < 10. 要提高性能, 则要应用 求值优化. 此外, 以 AND/OR/&&/|| (或其他任何运算符) 开始的行会自动 附加到 前一行的末尾.
    OR
    ||
    这两个运算符都是 逻辑或. 例如:x <= 3 or x >= 10. 要提高性能, 则要应用 求值优化.
    ?: 三元运算符 [v1.0.46+]. 此运算符是 if-else 语句 的简写形式. 它计算左侧的条件来决定两个分支中哪个作为最终结果. 例如, var := x>y ? 2 : 3, 当 x 大于 y 时保存 2 到 Var;否则保存 3. 为了提高性能, 只计算决定性的分支(请参阅求值优化).
    :=
    +=
    -=
    *=
    /=
    //=
    .=
    |=
    &=
    ^=
    >>=
    <<=

    赋值. 对变量的内容进行运算, 然后把结果保存到同一个变量中 (但在 1.0.46 之前的版本中, 这些运算符只能在一行中最左边使用, 且仅支持前五个运算符). 最简单的赋值运算符为 冒号等号 (:=), 它把表达式的结果保存到变量中. 关于其他运算符的功能说明, 请参阅这个表格中它们的相关条目. 例如, Var //= 2 执行向下舍除, 把 Var 除以 2, 然后把结果保存回 Var. 同样地, Var .= "abc" 为 Var := Var . "abc"的一种简写形式.

    与其他大多数运算符不同, 赋值运算是从右往左执行的. 因此, Var1 := Var2 := 0 这个语句中首先把 0 赋值给 Var2, 然后把 Var2 赋值给 Var1.

    如果使用赋值运算的结果作为其他某些运算符的输出, 那么输入的值是变量自身. 例如, 如果变量 Var 新增值后大于 50, 那么表达式 (Var+=2) > 50 结果为真. 这样还允许赋值被作为 ByRef 传递或获取它的地址, 例如:&(x:="abc").

    需要避免语法错误或提供更直观的操作时, 会自动提升赋值运算符的优先级. 例如:not x:=y 等价于 not (x:=y). 同样地, ++Var := X 等价于 ++(Var := X);而 Z>0 ? X:=2 : Y:=2 等价于 Z>0 ? (X:=2) : (Y:=2).

    由向后兼容引起的已知限制(可能会在未来的版本中解决):1) 当 /= 为表达式中最左边的运算符并且它不是多语句表达式的一部分时, 而且输入都不是浮点数时, 它会执行向下舍除(在其他所有情况中, /= 会执行真除);2) 仅当 += 和 -= 为一行中最左边的运算符时, 它们才支持日期/时间的计算;3) 运算符 +=-= 和 *= 仅在空变量在单独一行时才把它们视为零;例如, y:=1, x+=1 和 MsgBox % x-=3 当 x 为空时都得到空的结果.

    ,

    逗号 (多语句) [v1.0.46+]. 逗号可以用来在单行中书写多个子表达式. 最常用于把多个赋值或函数调用聚集在一起. 例如:x:=1, y+=2,++index, func(). 这样的语句按从左到右的顺序执行. 注意: 以逗号 (或其他任何运算符) 开始的行会自动 附加到 前一行的末尾. 另请参阅: 逗号的性能.

    在 v1.0.46.01+, 当逗号后紧跟着变量和等号时, 则这个等号会被自动当成赋值 赋值 (:=). 例如, 后面所有的都是赋值:x:=1, y=2, a=b=c.

    mod()
    round()
    abs()

    这些和其他内置数学函数在 这里 阐述.

    %func%()

    See Dynamically Calling a Function.
    func.()

    弃用的: 不推荐使用这个语法. 而应该用 %func%() (对于函数名称和对象) 或 func.Call() (对于函数对象) 替代.

    [AHK_L 48+]: 试图调用对象 func 的命名的空方法. 按照约定, 这是对象的 "默认" 方法. 如果 func 不是对象, 则调用 默认基对象.

    [v1.0.95+]: 如果 func 为函数名, 则调用这个命名的函数.

    F(p*) [AHK_L 60+]: 请参阅 可变参数函数.
    x[y] [AHK_L 31+]: 对象访问. 从对象 x 中取值或为其存入值或调用其方法, 这里的 y 是参数列表或计算方法名. 请参阅 数组语法 和 对象语法.

    性能: 从 v1.0.48+ 开始, 使用逗号运算符常常比分开写单独的表达式速度更快, 尤其是把一个变量的值赋给另一个变量时 (例如: x:=y, a:=b). 当越多的表达式联合成单个表达式时, 性能会持续得到提升; 例如, 把五个或十个简单的表达式联合成单个表达式速度可能提升 35%.

    内置变量

    下列变量内置于程序中, 可以在任何脚本中引用. 除了 ClipboardErrorLevel 和 命令行参数, 其他变量都是只读的; 即它们的内容无法在脚本中直接修改.

    目录

    特殊字符

    A_Space 此变量包含单个空格字符. 请参阅 AutoTrim 了解详情.
    A_Tab 此变量包含单个 tab 字符. 请参阅 AutoTrim 了解详情.

    脚本属性

    1, 2, 3 等 每当启动带命令行参数的脚本时, 会自动创建这些变量. 可以像普通变量一样修改和引用它们 (例如: %1%). 变量 %0% 包含了命令行参数的数目 (如果没有则为 0). 需了解详情请参阅 命令行参数.
    A_WorkingDir 脚本当前工作目录, 这是脚本访问文件的默认路径. 除非是根目录, 否则路径末尾不包含反斜线. 两个示例: C:\ 和 C:\My Documents. 使用 SetWorkingDir 可以改变当前工作目录.
    A_ScriptDir 当前脚本所在目录的绝对路径. 不包含最后的反斜线(根目录同样如此).
    A_ScriptName 当前脚本的文件名称, 不含路径, 例如 MyScript.ahk.
    A_ScriptFullPath 上面两个变量的组合, 包含了当前脚本的完整路径和名称, 例如 C:\My Documents\My Script.ahk
    A_ScriptHwnd
    [v1.1.01+]
    脚本隐藏主窗口的唯一 ID (HWND/句柄).
    A_LineNumber

    当前脚本中正在执行的行所在的行号 (或其 #Include 文件 的行号). 这个行号与 ListLines 显示的一致;它可以用在报告错误的时候, 例如:MsgBox Could not write to log file (line number %A_LineNumber%).

    由于 已编译脚本 已经把它所有的 #Include 文件 合并成一个大脚本, 所以它的行号可能与它在未编译模式运行时不一样.

    A_LineFile A_LineNumber 所属文件的完整路径和名称, 除非当前行属于未编译脚本的某个 #Include 文件, 否则它将和 A_ScriptFullPath 相同.
    A_ThisFunc
    [v1.0.46.16+]
    当前正在执行的 自定义函数 的名称 (没有则为空); 例如: MyFunction. 另请参阅: IsFunc()
    A_ThisLabel
    [v1.0.46.16+]
    当前正在执行的 标签 (子程序) 的名称 (没有则为空); 例如: MyLabel. 每当脚本执行 Gosub/Return 或 Goto 时会更新此变量的值. 执行自动调用的标签时也会更新此变量的值, 例如计时器GUI 线程菜单项热键热字串OnClipboardChange 和 OnExit. 不过, 当执行从前面的语句"进入"一个标签时不会更新 A_ThisLabel 的值, 即此时它还是保持原来的值. 另请参阅: A_ThisHotkey 和 IsLabel()
    A_AhkVersion 在 1.0.22 之前的版本, 此变量为空. 否则, 它包含了运行当前脚本的 AutoHotkey 主程序的版本号, 例如 1.0.22. 在 已编译脚本 中, 它包含了原来编译时使用的主程序的版本号. 格式化的版本号使得脚本可以使用 > 或 >= 来检查 A_AhkVersion 是否大于某个最小的版本号, 例如:if A_AhkVersion >= 1.0.25.07.
    A_AhkPath

    对于未编译脚本: 实际运行当前脚本的 EXE 文件的完整路径和名称. 例如: C:\Program Files\AutoHotkey\AutoHotkey.exe

    对于 已编译脚本: 除了通过注册表条目 HKEY_LOCAL_MACHINE\SOFTWARE\AutoHotkey\InstallDir 获取 AutoHotkey 目录外, 其他的和上面相同. 如果找不到这个注册表条目, 则 A_AhkPath 为空.

    A_IsUnicode 当字符串为 Unicode (16 位) 时值为 1, 字符串为 ANSI (8 位) 时为空字符串 (这会被视为 false). 字符串的格式取决于用来运行当前脚本的 AutoHotkey.exe, 如果为已编译脚本, 则取决于用来编译它的主程序.
    A_IsCompiled 如果当前运行的脚本为 已编译 EXE 时此变量值为 1, 否则为空字符串 (这会被视为 false).
    A_ExitReason 最近一次要求脚本终止的原因. 除非脚本含有 OnExit 子程序并且此子程序当前正在运行或被退出尝试至少调用过一次, 否则此变量为空. 请参阅 OnExit 了解详情.

    日期和时间

    A_YYYY 4 位数表示的当前年份 (例如 2004). 与 A_Year 含义相同. 注意:要获取符合您区域设置和语言的格式化时间或日期, 请使用 FormatTime, OutputVar(时间和长日期)或 FormatTime, OutputVar,, LongDate(获取长格式日期).
    A_MM 2 位数表示的当前月份 (01-12). 与 A_Mon 含义相同.
    A_DD 2 位数表示的当前月份的日期 (01-31). 与 A_MDay 含义相同.
    A_MMMM 使用当前用户语言表示的当前月份的全称, 例如 July
    A_MMM 使用当前用户语言表示的当前月份的简称, 例如 Jul
    A_DDDD 使用当前用户语言表示的当前星期几的全称, 例如 Sunday
    A_DDD 使用当前用户语言表示的当前星期几的 3 个字母的简称, 例如 Sun
    A_WDay 1 位数表示的当前星期经过的天数 (1-7). 在所有区域设置中 1 都表示星期天.
    A_YDay 当前年份中经过的天数 (1-366). 不会使用零对变量的值进行填充, 例如会获取到 9, 而不是 009. 要对变量的值进行零填充, 请使用:FormatTime, OutputVar, , YDay0.
    A_YWeek 符合 ISO 8601 标准的当前的年份和周数 (例如 200453). 要分离年份和周数, 请使用 StringLeft, Year, A_YWeek, 4 和 StringRight, Week, A_YWeek, 2. A_YWeek 的准确定义为: 如果含有 1 月 1 日的星期有四天以上在新年里, 则它被认为是新年的第一个星期. 否则, 它为前一年的最后一个星期, 而下一星期为新年的第一星期.
    A_Hour 在 24 小时制 (例如, 17 表示 5pm) 中 2 位数表示的当前小时数 (00-23). 要获取带 AM/PM 提示的 12 小时制的时间, 请参照此例:FormatTime, OutputVar, , h:mm:ss tt
    A_Min

    2 位数表示的当前分钟数 (00-59).

    A_Sec 2 位数表示的当前秒数 (00-59).
    A_MSec 3 位数表示的当前毫秒数 (000-999). 要移除前导零, 请参照此例:Milliseconds := A_MSec + 0.
    A_Now YYYYMMDDHH24MISS 格式的当前本地时间. 注意: 使用 EnvAdd 和 EnvSub 可以对日期和时间进行计算. 此外, 使用 FormatTime 可以根据您的区域设置或选项来格式化日期和/或时间.
    A_NowUTC YYYYMMDDHH24MISS 格式的当前的协调世界时 (UTC). UTC 本质上和格林威治标准时间 (GMT) 一致.
    A_TickCount

    计算机重启后经过的毫秒数. 通过把 A_TickCount 保存到变量中, 经过一段时间后从最近的 A_TickCount 值中减去那个变量, 可以计算出所经过的时间. 例如:

    StartTime := A_TickCount
    Sleep, 1000
    ElapsedTime := A_TickCount - StartTime
    MsgBox,  %ElapsedTime% milliseconds have elapsed.

    如果您需要比 A_TickCount 的10ms 更高的精确度, 请使用 QueryPerformanceCounter().

    脚本设置

    A_IsSuspended 当脚本 挂起时 值为 1, 否则为 0.
    A_IsPaused
    [v1.0.48+]
    当紧随当前线程的 线程 被 暂停 时值为 1. 否则为 0.
    A_IsCritical
    [v1.0.48+]
    当前线程 的 Critical 设置关闭时值为 0. 否则它包含大于零的整数, 即 Critical 使用的 消息检查频率. 因为 Critical 0 关闭了当前线程的关键性, 所以 Critical 的当前状态可以这样来保存和恢复:Old_IsCritical := A_IsCritical, 后来执行 Critical %Old_IsCritical%.
    A_BatchLines (同义于 A_NumBatchLines) 由 SetBatchLines 设置的当前值. 例如: 200 或 10ms (取决于格式).
    A_TitleMatchMode 由 SetTitleMatchMode 设置的当前模式: 1, 2, 3 或 RegEx.
    A_TitleMatchModeSpeed 由 SetTitleMatchMode 设置的当前匹配速度 (fast 或 slow).
    A_DetectHiddenWindows 由 DetectHiddenWindows 设置的当前模式 (On 或 Off).
    A_DetectHiddenText 由 DetectHiddenText 设置的当前模式 (On 或 Off).
    A_AutoTrim 由 AutoTrim 设置的当前模式 (On 或 Off).
    A_StringCaseSense 由 StringCaseSense 设置的当前模式 (On, Off 或 Locale).
    A_FileEncoding [AHK_L 46+] 包含了多个命令使用的默认编码; 请参阅 FileEncoding.
    A_FormatInteger 由 SetFormat 设置的当前整数格式 (H 或 D). [AHK_L 42+]: 此变量还可能为小写字母 h.
    A_FormatFloat 由 SetFormat 设置的当前浮点数格式.
    A_SendMode [v1.1.23+]: 由 SendMode 设置的当前模式字符串 (可能的值为: Event, Input, Play 或 InputThenPlay).
    A_SendLevel [v1.1.23+]: 当前 SendLevel 的设置 (可能的值为: 0 到 100 之间的整数, 包括0和100).
    A_StoreCapslockMode [v1.1.23+]: 由 SetStoreCapslockMode 设置的当前模式字符串 (可能的值为: On 或 Off).
    A_KeyDelay
    A_KeyDuration
    由 SetKeyDelay 设置的当前延迟 (总是十进制数, 不是十六进制). A_KeyDuration 依赖 [v1.1.23+] .
    A_KeyDelayPlay
    A_KeyDurationPlay
    表示由 SetKeyDelay 设置 SendPlay 模式的延迟或持续时间 (总是十进制数, 不是十六进制). 依赖 [v1.1.23+].
    A_WinDelay 由 SetWinDelay 设置的当前延迟 (总是十进制数, 不是十六进制).
    A_ControlDelay 由 SetControlDelay 设置的当前延迟 (总是十进制数, 不是十六进制).
    A_MouseDelay
    A_MouseDelayPlay
    由 SetMouseDelay 设置的当前延迟 (总是十进制数, 不是十六进制). A_MouseDelay 表示传统的 SendEvent 模式, 而 A_MouseDelayPlay 则表示 SendPlay. A_MouseDelayPlay 依赖 [v1.1.23+].
    A_DefaultMouseSpeed 由 SetDefaultMouseSpeed 设置的当前速度 (总是十进制数, 不是十六进制).
    A_CoordModeToolTip
    A_CoordModePixel
    A_CoordModeMouse
    A_CoordModeCaret
    A_CoordModeMenu
    [v1.1.23+]: CoordMode 的当前设置值的字符串. (可能的值为: Window, Client 或 Screen)
    A_RegView [v1.1.08+]: 由 SetRegView 设置的当前注册表视图.
    A_IconHidden 托盘图标当前隐藏时值为 1, 否则为 0. 此图标可以使用 #NoTrayIcon 或 Menu 命令进行隐藏.
    A_IconTip 如果使用 Menu, Tray, Tip 为托盘图标指定了自定义的工具提示时, 变量的值为这个提示的文本, 否则为空.
    A_IconFile 如果使用 Menu, tray, icon 指定了自定义的托盘图标时, 变量的值为图标文件的完整路径和名称, 否则为空. 已知限制:如果脚本原来传递相对路径给系统的 DLL, 那么此变量中的路径可能不正确;例如 Menu, Tray, Icon, user32.dll, 2.
    A_IconNumber 当 A_IconFile 为空时此变量为空. 否则, 它的值为 A_IconFile 中的图标编号 (通常为 1).

    用户空闲时间

    A_TimeIdle 从系统最后一次接收到键盘, 鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开. 用户的物理输入和由 任何 程序或脚本生成的模拟输入 (例如 Send 或 MouseMove 命令) 会让此变量重置为零. 由于此变量的值趋向于以 10 的增量增加, 所以不应该判断它是否等于另一个值. 相反, 应该检查此变量是否大于或小于另一个值. 例如:IfGreater, A_TimeIdle, 600000, MsgBox, The last keyboard or mouse activity was at least 10 minutes ago.
    A_TimeIdlePhysical

    与上面类似, 但在安装了相应的钩子 (键盘 或 鼠标) 后会忽略模拟的键击和/或鼠标点击; 即此变量仅反应物理事件. (这样避免了由于模拟键击和鼠标点击而误以为用户存在.) 如果两种钩子都没有安装, 则此变量等同于 A_TimeIdle. 如果仅安装了一种钩子, 那么仅此类型的物理输入才会对 A_TimeIdlePhysical 起作用 (另一种/未安装钩子的输入, 包括物理的和模拟的, 都会被忽略).

    GUI 窗口和菜单栏

    A_DefaultGui [v1.1.23+] 当前线程的 GUI 名称或序号.
    A_DefaultListView [v1.1.23+] ListView控件 的 变量名 或 句柄 ,这取决与使用了何种 ListView 函数 . 如果默认GUI中没有ListView控件,此变量为空.
    A_DefaultTreeView [v1.1.23+] TreeView控件 的 变量名 或 句柄 ,这取决与使用了何种 TreeView 函数 . 如果默认GUI中没有TreeView控件,此变量为空.
    A_Gui 启动了 当前线程 的 GUI 的名称或编号. 除非当前线程是由 Gui 控件, 菜单项或 Gui 事件 (例如 GuiClose/GuiEscape) 启动的, 否则此变量为空.
    A_GuiControl 启动 当前线程 的 GUI 控件的关联变量名. 如果那个控件没有 关联变量, 则 A_GuiControl 包含此控件的文本/标题中前 63 个字符 (这常用来避免给每个按钮分配变量名). 出现后面这些情况时 A_GuiControl 为空: 1) A_Gui 为空; 2) GUI 菜单项或事件 (例如 GuiClose/GuiEscape) 启动了当前线程; 3) 那个控件没有关联变量, 也没有标题; 或 4) 最初启动当前线程的控件已经不存在 (可能由于 Gui Destroy 的原因).
    A_GuiWidth
    A_GuiHeight
    在 GuiSize 子程序 中引用时, 它们分别包含了 GUI 窗口的宽度和高度. 它们对应于窗口的工作区, 这是窗口中不包括标题栏, 菜单栏和边框的区域. [v1.1.11+]:这些值会受 DPI 缩放的影响.
    A_GuiX
    A_GuiY
    它们包含了 GuiContextMenu 和 GuiDropFiles 事件中的 X 和 Y 坐标. 这里的坐标相对于窗口的左上角. [v1.1.11+]: 这些值会受 DPI 缩放 的影响.
    A_GuiEvent
    or A_GuiControlEvent

    启动 当前线程 的事件类型. 如果当前线程不是由 GUI 动作 启动的, 则此变量为空. 否则, 它为下列字符串的其中一个:

    Normal: 此事件是由左键单击和键击 (方向键, TAB 键, 空格键, 带下划线的快捷键等) 触发的. 此变量的值还可以用于菜单项和特殊的 Gui 事件, 例如 GuiClose 和 GuiEscape.

    DoubleClick: 此事件是由双击触发的. 注意: 双击中的首次点击仍会引起 Normal 事件首先被接收到. 换句话说, 双击时子程序会运行两次: 一次在首次点击时, 再次是在第二次点击时.

    RightClick: 仅出现在 GuiContextMenuListViews 和 TreeViews.

    上下文相关值:要了解详情请参阅 GuiContextMenuGuiDropFilesSliderMonthCalListView 和 TreeView.

    A_EventInfo

    包含下列事件的额外信息:

    注意: 与类似 A_ThisHotkey 这样的变量不同, 每个 线程 会为 A_Gui, A_GuiControl, A_GuiX/Y, A_GuiEvent 和 A_EventInfo 保存它自己本身的值. 因此, 如果一个线程被另一个中断, 在这个线程恢复时它仍将看到这些变量的原来/正确的值.

    热键, 热字串和自定义菜单项

    A_ThisMenuItem 最近选择的 自定义菜单项 的名称 (没有则为空).
    A_ThisMenu A_ThisMenuItem 所在菜单的名称.
    A_ThisMenuItemPos 表示 A_ThisMenuItem 在 A_ThisMenu 当前 位置的编号. 菜单中首个项目为 1, 第二项为 2, 依此类推. 菜单分隔线也计算在内. 如果 A_ThisMenuItem 为空或已不存在于 A_ThisMenu 中, 则此变量为空. 如果 A_ThisMenu 已不存在, 则此变量也为空.
    A_ThisHotkey

    最近执行的 热键 或 非自动替换热字串 的按键名称 (如果没有则为空), 例如 #z. 如果 当前线程 被其他热键中断, 那么此变量的值会变化, 所以如果之后需要在子程序中使用原来的值, 则必须马上把它复制到另一个变量中.

    首次创建热键时 (通过 Hotkey 命令 或 双冒号标签 ), 其键名以及修饰符的顺序成为此热键的固定名称,被所有热键 variants 变量共享.

    另请参阅: A_ThisLabel

    A_PriorHotkey 除了保存前一次热键的名称外, 其他的与上面相同. 如果没有它会为空.
    A_PriorKey [v1.1.01+]: 在最近按键按下或按键释放前最后按下的按键名称, 如果在按键历史中没有适用的按键按下则为空. 不包括由 AutoHotkey 脚本生成的所有输入. 要使用此变量, 首先必须安装 键盘 或 鼠标钩子 同时启用 按键历史.
    A_TimeSinceThisHotkey 从 A_ThisHotkey 按下后到现在经过的毫秒数. 如果 A_ThisHotkey 为空, 则此变量的值为 -1.
    A_TimeSincePriorHotkey 从 A_PriorHotkey 按下后到现在经过的毫秒数. 如果 A_PriorHotkey 为空, 则此变量的值为 -1.
    A_EndChar 用户最近按下的触发了 非自动替换热字串 的 终止符. 如果不需要终止符 (由于使用了 * 选项), 那么此变量将为空.

    操作系统和用户信息

    ComSpec
    [v1.0.43.08+]
    此变量的值与系统环境变量 ComSpec 一样 (例如 C:\Windows\system32\cmd.exe). 常与 Run/RunWait 一起使用. 注意: 此变量不带 A_ 前缀.
    A_Temp
    [v1.0.43.09+]
    存放临时文件的文件夹的完整路径和名称 (例如 C:\DOCUME~1\UserName\LOCALS~1\Temp). 它的值从下列的其中一个位置获取 (按顺序): 1) 环境变量 TMP, TEMP 或 USERPROFILE; 2) Windows 目录.
    A_OSType 正在运行的操作系统类型. 由于 AutoHotkey 1.1 仅支持基于 NT 的操作系统, 所以此变量总是为 WIN32_NT. 旧版本的 AutoHotkey 运行在 Windows 95/98/ME 时会返回 WIN32_WINDOWS.
    A_OSVersion

    下列字符串中的一个(如果存在):WIN_7 [需要 AHK_L 42+], WIN_8 [需要 v1.1.08+], WIN_8.1 [需要 v1.1.15+], WIN_VISTA, WIN_2003, WIN_XP, WIN_2000.

    在AutoHotKey的执行文件或编译后的脚本属性里添加兼容性设置会让操作系统报告不同的版本信息,可以间接得出 A_OSVersion .

    [v1.1.20+]: 如果系统版本没有被识别成上述版本,会返回一个"major.minor.build"形式的字符串. 如, Windows 10 TP 是 6.4.9841.

    ; 这个示例已过时了, 里面的这些操作系统都不再受支持. 
    if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME  ; 注:逗号两边没有空格. 
    {
        MsgBox This script requires Windows 2000/XP or later.
        ExitApp
    }
    A_Is64bitOS [v1.1.08+]:当操作系统为 64 位则值为 1(真), 为 32 位则为 0(假).
    A_PtrSize [AHK_L 42+]: 包含指针的大小值, 单位为字节. 值为 4(32 位)或 8(64位), 取决于运行当前脚本的执行程序的类型.
    A_Language 当前系统的默认语言, 值为 这些 4- 位数字编码 的其中一个.
    A_ComputerName 在网络上看到的计算机名称.
    A_UserName 运行当前脚本的用户的登录名.
    A_WinDir Windows 目录. 例如: C:\Windows
    A_ProgramFiles
    或 ProgramFiles

    Program Files 目录 (例如 C:\Program Files 或者 C:\Program Files (x86)). 一般来说和 ProgramFiles 环境变量 一样.

    在 64位系统 (非32位系统) 上适用:

    • 如果可执行文件 (EXE) 以32位脚本运行的时候, A_ProgramFiles 返回路径为 "Program Files (x86)" 目录.
    • 对于32位的进程, 这个 ProgramW6432 环境变量 指向 64 位 Program Files 目录. 在 Windows 7 和更高版本上, 对于 64 位的进程也是这样设置的.
    • 而 ProgramFiles(x86) 环境变量指向 32 位 Program Files 目录.

    在 v1.0.43.08+, 前缀 A_ 可以省略, 这样有助于自然过渡到 #NoEnv.

    A_AppData
    [v1.0.43.09+]
    当前用户的应用程序数据文件夹的完整路径和名称. 例如: C:\Documents and Settings\Username\Application Data
    A_AppDataCommon
    [v1.0.43.09+]
    所有用户的应用程序数据文件夹的完整路径和名称.
    A_Desktop 当前用户的桌面文件夹的完整路径和名称.
    A_DesktopCommon 所有用户的桌面文件夹的完整路径和名称.
    A_StartMenu 当前用户的开始菜单文件夹的完整路径和名称.
    A_StartMenuCommon 所有用户的开始菜单文件夹的完整路径和名称.
    A_Programs 当前用户的开始菜单中程序文件夹的完整路径和名称.
    A_ProgramsCommon 所有用户的开始菜单中程序文件夹的完整路径和名称.
    A_Startup 当前用户的开始菜单中启动文件夹的完整路径和名称.
    A_StartupCommon 所有用户的开始菜单中启动文件夹的完整路径和名称.
    A_MyDocuments 当前用户 "我的文档" 文件夹的完整路径和名称. 与大多数类似变量不同, 当此文件夹为驱动器的根目录时, 此变量的值不包含最后的反斜线. 例如, 它的值我 M: 而不是 M:\
    A_IsAdmin

    如果当前用户有管理员权限, 则此变量的值为 1. 否则为 0.

    在 Windows Vista 或更高版本中, 一些脚本可能需要管理员权限才能正常运行 (例如与使用管理员权限执行的进程和窗口进行交互的脚本). 要做到这点, 请把下列语句添加到脚本的顶部:

    if not A_IsAdmin
    {
       Run *RunAs "%A_ScriptFullPath%"  ; 需要 v1.0.92.01+
       ExitApp
    }

    尽管这个方法也可以让脚本对以管理员权限运行的程序窗口进行自动化操作,但这并不是唯一的方法. 详参 FAQ .

    A_ScreenWidth
    A_ScreenHeight

    主监视器的宽度和高度, 单位为像素 (例如 1024 和 768).

    要获取多显示器系统中其他显示器的尺寸, 请使用 SysGet.

    要获取整个桌面(即使它横跨多个显示器)的宽度和高度, 请使用下面的例子:

    SysGet, VirtualWidth, 78
    SysGet, VirtualHeight, 79
    

    此外, 使用 SysGet 可以获取显示器的工作区域, 它比显示器的整个区域小, 因为它不包括任务栏和其他注册的桌面工具栏.

    A_ScreenDPI [v1.1.11+] 在屏幕宽度上每逻辑寸的像素数. 在多显示器的系统中, 这个值对于所有的显示器都是一样的. 在大多数系统中该值为 96;它取决于系统文本大小(DPI)设置. 另请参阅 Gui -DPIScale.
    A_IPAddress1 到 4 计算机中前 4 个网卡的 IP 地址.

    杂项

    A_Cursor

    当前显示的鼠标光标类型. 其值为下列单词的其中一个: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. 与 size 指针类型一起的首字母表示方向, 例如 NESW = NorthEast+SouthWest. 手型指针 (点击和抓取) 属于 Unknown 类别.

    A_CaretX
    A_CaretY

    当前光标 (文本插入点) 的 X 和 Y 坐标. 如果没有使用 CoordMode 使得坐标相对于整个屏幕, 默认坐标相对于活动窗口. 如果没有活动窗口或无法确定文本插入点的位置, 则这两个变量为空.

    下面这个脚本可以让您在四处移动文本插入点时, 查看显示在自动更新工具提示上的当前位置. 注意在某些窗口 (例如某些版本的 MS Word) 会不管文本插入点的实际位置如何都报告同样的位置.

    #Persistent
    SetTimer, WatchCaret, 100
    return
    WatchCaret:
      ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
    return
    
    Clipboard 操作系统剪贴板的内容, 可以从中读取或写入内容. 请参阅 剪贴板 章节.
    ClipboardAll 剪贴板中的完整内容 (包含格式和文本). 请参阅 ClipboardAll.
    ErrorLevel 请参阅 ErrorLevel.
    A_LastError 操作系统 GetLastError() 函数或最近 COM 对象调用返回的结果. 要了解详情, 请参阅 DllCall() 和 Run/RunWait.

    Loop

    A_Index 当前循环重复的次数 (64 位整数). 例如, 当脚本首次执行此循环体时, 此变量的值为 1. 要了解详情请参阅 Loop 或 While 循环.
    A_LoopFileName 等 此变量和其他相关变量仅在 文件循环 中有效.
    A_LoopRegName 等 此变量和其他相关变量仅在 注册表循环 中有效.
    A_LoopReadLine 请参阅 文件读取循环.
    A_LoopField 请参阅 解析循环.

    环境变量与 "普通" 变量

    环境变量由操作系统维护. 在命令提示符中输入 SET 并回车后, 您可以看到环境变量列表.

    脚本中可以使用 EnvSet 创建新的环境变量或改变现有环境变量的内容. 但是, 这样的添加和改变都是私有的; 它们不会被系统的其他部分看到. 一个例外是当脚本使用 Run 或 RunWait 运行程序时 (甚至是另一个脚本): 这样的程序会继承其父脚本的环境变量的副本, 包括私有的那些.

    在 v1.0.43.08+, 推荐在所有新脚本中使用以下方式获取环境变量, 例如 Path:

    EnvGet, OutputVar, Path  ; 想了解含义, 请参阅 #NoEnv.

    变量的容量和占用内存

    • 每个变量最多可以含有64MB的文本(使用#MaxMem可以突破这个限制).
    • 当赋值给变量比当前更长的内容时, 会自动分配额外的系统内存给这个变量.
    • 通过赋值为空可以释放大变量占用的内存, 例如 Var := "".
    • 脚本可以创建的变量数量没有限制. 程序设计用来支持至少几百万的变量而不会出现明显的性能下降.
    • 接受数值输入的命令, 函数和表达式通常可以支持 15 位的浮点数精度. 对于整数, 可以支持 64 位有符号整数, 其范围从 -9223372036854775808 (-0x8000000000000000) 到 9223372036854775807 (0x7FFFFFFFFFFFFFFF). 此范围外的任何整数不受支持, 并可能产生错误的结果. 与之相比, 整数的算数运算结果超出此范围时会产生溢出 (例如 0x7FFFFFFFFFFFFFFF + 1 = -0x8000000000000000).
    展开全文
  • shell变量

    2014-05-28 14:39:59
    1。系统变量 常用的系统变量 变量名  含义 $# ...当前程序的名称 $? 前一个命令或许或函数的返回码 $* 以“参数1 参数2 。。。”形式保存所有参数

    参考http://www.360doc.com/content/13/1014/19/7377734_321441270.shtml


    变量定义得格式:

    name=value             //=字符串变量赋值,其值一般都用引号,可以不用引号(前提是字符串不成句,不能有空格),变量名中,不能有“中杠-",中杠会被识别为减号,必须改成"下杠_",变量引用要带$(read和赋值=和export,引用变量,不带$),字符串变量在if条件里,最好用" "引起来;类似单引号,反斜线"\" 也能屏蔽所有特殊字符.但一次只能屏蔽一个字符;""   引号中间没有任何字符,表示回车;

    env             //查看环境变量

    set              //查看局部变量和环境变量

    export  $name       //将局部变量导入为环境变量。

    1、取字符串 ${变量名:位置起点} 或 ${变量名:位置起点:长度}

    2、取部分位置参数 ${@:起点}或${@:起点:个数} 其中$@表示所有参数,如$0命令本身、$1....

    3、计算字符串长度 ${#变量名}

    4、替换或删除部分字符串 ${变量名/样式/替换字符串} 如果变量中有符合样式的字符串,则使用替换字符串替换,只替换第一个符合样式的字符串

    ${变量名//样式/替换字符串} 如果变量中有符合样式的字符串,则使用替换字符串替换,替换全部符合样式的字符串

    5、把符合样式的字符串删除 ${变量名/样式/} 删除符合样式的第一个字符串

    ${变量名/样式/} 删除符合样式的所有字符串

    7、取变量名称列表 ${!开头字符串@}或${!开头字符串*} 把所有以指定字符串开头的变量名列出,各变量之间按空格分开

    8、取数组索引列表 ${!数组变量[@]}或${!数组变量[*]} 把数组变量所有的索引列出,各索引值之间用空格符分开

    符号 内容
    * 万用字符,代表一个或多个字符(或数字)
    ? 万用字符,代表一个字母
    # 批注,这个最常被使用在 script 当中,视为说明!
    / 跳脱符号,将『特殊字符或万用字符』还原成一般字符
    | 分隔两个管线命令的界定 ;
    ; 连续性命令的界定(注意!与管线命令并不相同)
    ~ 使用者的家目录
    $ 亦即是变量之前需要加的变量取代值
    & 将指令变成背景下工作
    ! 逻辑运算意义上的『非』 not 的意思!
    / 路径分隔的符号
    >, >> 输出导向,分别是『取代』与『累加』
    ' 单引号,不具有变量置换的功能
    " 具有变量置换的功能!
    ` ` 两个『 ` 』中间为可以先执行的指令!
    (   ) 在中间为子 shell 的起始与结束
    [  ] 在中间为字符的组合
    {   } 在中间为命令区块的组合!


    1。系统变量

    常用的系统变量
    变量名       含义
    $#

        命令行参数的个数,使用时加引号

    $n

       $1表示第一个参数,$2表示第二个参数,以此类推

    $0
    当前程序的名称
    $?

    前一个命令或许或函数的返回码

    $*

    以“参数1 参数2 。。。”形式保存所有参数

    $@

    以“参数1”“参数2”。。。形式保存所有参数,使用时加引号

    $$ 本程序的(进程ID号)PID
    $! 上一个命令的PID
       

    2。环境变量

    当shell程序启动时,都自动设置一组变量,这组变量就是环境变量。shell中的所有命令都可以使用这些参数,例如之前博客中提到的LOGNAME变量。环境变量可以在~/.bash_profile或者~/.bashrc中设置,

    下面列举了常见的环境变量:

    常见的环境变量
    变量名 含义

    PATH

    命令搜索路径,以冒号为分隔符。注意与DOS下不同的是当前目录不在系统路径里
    HOME 用户home目录的路径名,是cd命令的默认参数
    COLUMNS 定义了命令编辑模式下可使用命令行的长度
    EDITOR 默认的行编辑器
    VISUAL 默认的可视编辑器
    FCEDIT 命令fc使用的编辑器
    HISTFILE 命令历史文件
    HISTSIZE 命令历史文件中最多可包含的命令条数(默认1000条)
    HISTFILESIZE 命令历史文件中包含的最大行数
    IFS 定义shell使用的分隔符
    LOGNAME 用户登录名
    MAIL 指向一个需要shell监视其修改时间的文件。当该文件修改后,shell将发消息You have mail给用户
    MAILCHECK shell检查MAIL文件的周期,单位是秒
    MAILPATH 功能与MAIL类似,但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息
    SHELL shell的路径名
    TERM 终端类型
    TMOUT shell自动退出的时间,单位为秒,若设为0则禁止shell自动退出
    PROMPT_COMMAND 指定在主命令提示符前应执行的命令
    PS1 主命令提示符
    PS2 二级命令提示符,命令执行过程中要求输入数据时用
    PS3 selcet的命令提示符
    PS4 调试命令提示符
    MANPATH 寻找手册页的路径,以冒号分隔
    LD_LIBRARY_PATH 寻找库的路径,以冒号分隔

     


    定义数组

    为单个元素赋值 name[index]=value

    为整个数组赋值 name=(value1 value2... valuen) 各个元素以空格分离。或name=([0]=value0 [3]=value3 [5]=value5)

    访问单个值 ${name[index]}

    访问整个数组 ${name[*]}或${name[@]} 可以处理包含空格的数组元素,推荐使用。



    13.10.5  环境变量

    环境变量可用在创建它们的shell和从该shell派生的任意子shell或进程中。它们通常被称为全局变量,以区别于局部变量。通常,环境变量应该大写。环境变量是已经用export内置命令导出的变量。

    变量被创建时所处的shell被称为父shell。如果父shell又启动了一个shell,这个新的shell被称作子shell。环境变量将传递给从创建它们的shell里启动的任意子进程。它们从父亲传递给儿子再到孙子等,但是不可向其他方向传递。比如,一个子进程可以创建环境变量,但不能将它传回给它的父进程,只能传给它的子进程 15。有一些环境变量,比如HOME、LOGNAME、PATH和SHELL,在用户登录之前就已经被/bin/login程序设置好了。通常,环境变量定义并保存在用户主目录下的.bash_profile文件中。请参见表13-14中列出的环境变量。

    表13-14  bash环境变量

    变  量  名

    含    义

    _(下划线)

    上一条命令的最后一个参数

    BASH

    展开为调用bash实例时使用的全路径名

    BASH_ENV

    和ENV一样,但只可在bash 2.0或更高版本中设置 16

    BASH_VERSINFO

    使用2.0以上版本的bash时,展开为版本信息 16

    BASH_VERSION

    展开为当前bash实例的版本号

    CDPATH

    cd命令的搜索路径。它是以冒号分隔的目录列表,shell通过它来搜索cd命令指定的目标目录。例如.:~:/usr

    COLUMNS

    设置该变量就给shell编辑模式和选择的命令定义了编辑窗口的宽度

    DIRSTACK

    在2.0或以上版本的bash中,代表目录栈的当前内容

    EDITOR

    内置编辑器emacs、gmacs或vi的路径名

    ENV

    每一个新的bash shell(包括脚本)启动时执行的环境文件。通常赋予这个变量的文件名是.bashrc。ENV的值被解释为路径名前,shell先要对其进行参量扩展,命令替换和算术扩展

    EUID

    展开为在shell启动时被初始化的当前用户的有效ID

    FCEDIT

    fc命令的默认编辑器名

    FIGNORE

    执行文件名补全时可忽略的以冒号分隔的后缀列表。以FIGNORE中任一项为后缀的文件名被从匹配的文件名列表中排除。例如值为.o:~

    FORMAT

    用来格式化在命令管道上的time关键字的输出

    GLOBIGNORE

    在文件名扩展(称为globbing)时被忽略的文件列表

    GROUPS

    当前用户所属的组

    HISTCMD

    当前命令的历史编号或在历史清单中的序号。如果HISTCMD被复位,即使它随后就会重置,也将失去它的特殊属性

    HISTCONTROL

    如果设置了ignorespace值,以一个空格符开头的行将不会进入历史清单。如果设置了ignoredups值,那和前一个历史行匹配的行不会进入。值ignoreboth结合了这两个选项。如果被复位,或设置成除了上面所说的任意其他值时,所有被解释器所读的行都将保存到历史清单中

      HISTFILE

    指定保存命令行历史的文件。默认值是~/.bash_history。如果被复位,交互式shell退出时将不保存命令行历史

    (续表)  

    变  量  名

    含    义

    HISTFILESIZE

    历史文件能包含的最大行数。当给这个变量赋值后,如果有必要,历史文件将被截尾,以使包含的行数不超过这个数。默认值是500

    HISTSIZE

    记录在命令行历史文件中的命令数。默认是500

    HOME

    主目录。未指定目录时,cd命令将转向该目录

    HOSTFILE

    包含一个格式和/etc/hosts一样的文件的名称,当shell需要补全一个主机名时将读取该文件。文件可以交互式更改。下一次试图补全主机名时,bash将新文件的内容添加到已经存在的数据库中

    HOSTTYPE

    自动设置正在运行bash的机器的类型。默认值是由系统决定的

    IFS

    内部字段分隔符,一般是空格符、制表符和换行符,用于由命令替换,循环结构中的表和读取的输入产生的词的字段划分

    IGNOREEOF

    控制shell接收到单独一个EOF字符作为输入时的行为。如果设置,它的值就是shell退出前在一个输入行的最前面键入的连续EOF字符的个数。如果变量存在但没有一个数字值,或没有值,那么默认值是10。如果它不存在,EOF意味着给shell的输入的终止。它只在交互式shell中有效

    INPUTRC

    readline启动文件的文件名,取代默认的~/.inputrc

    LANG

    用来为没有以LC_开头的变量明确选取的种类确定locale类

    LC_ALL

    忽略LANG和任何其他LC_变量的值

    LC_COLLATE

    确定对路径名扩展的结果进行排序时的整理顺序,以及匹配文件名与模式时的范围表达式,等价类和整理序列的行为

    LC_MESSAGES

    确定用于转换前面有一个$的双引号串的locale

    LINENO

    每次shell在一个脚本或函数中替换代表当前连续行号(从1开始)的十进制数时,都将引用该参数

    MACHTYPE

    包含一个描述正在运行bash的系统的串

    MAIL

    如果该参数被设置为某个邮件文件的名称,而MAILPATH未被设置,当邮件到达MAIL指定的文件时,shell会通知用户

    MAIL_WARNING

    如果设置了该变量,当bash发现用于检查邮件的文件在上次检查后又被访问了,将打印消息“The mail in [filename where mail is stored] has been read”

    MAILCHECK

    这个参数定义shell将隔多长时间(以秒为单位)检查一次由参数MAILPATH或MAILFILE指定的文件,看看是否有邮件到达。默认值是600秒(10分钟)。如果将它设为0,shell每次输出主提示符之前都会去检查邮件

    MAILPATH

    由冒号分隔的文件名列表。如果设置了这个参数,只要有邮件到达任何一个由它指定的文件,shell都会通知用户。每个文件名后面都可以跟一个百分号和一条消息,当文件修改时间发生变化时,shell会显示这条消息。默认的消息是:You have mail

                                                    (续表)  

    变  量  名

    含    义

    OLDPWD

    前一个工作目录

    OPTARG

    上一个由getopts内置命令处理的选项参数的值

    OPTERR

    如果设置成1,显示来自getopts内置命令的错误信息

    OPTIND

    下一个由getopts内置命令处理的参数的序号

    OSTYPE

    自动设置成一个串,该串描述正在运行bash的操作系统。默认值由系统决定

    PATH

    命令搜索路径。一个由冒号分隔的目录列表,shell用它来搜索命令。默认路径由系统决定,并且由安装bash的管理员设置。一个普通值为

    /usr/gnu/bin:/usr/local/bin:/usr/ucb:/usr/bin:

    PIPESTATUS

    一个数组,包含一列最近在管道执行的前台作业的进程退出状态值

    PPID

    父进程的进程ID

    PROMPT_COMMAND

    赋给这个变量的命令将在主提示符显示前执行

    PS1

    主提示符串,默认值是$

    PS2

    次提示符串,默认值是>

    PS3

    与select命令一起使用的选择提示符串,默认值是#?

    PS4

    当开启追踪时使用的调试提示符串,默认值是+。追踪可以用set –x开启

    PWD

    当前工作目录。由cd设置

    RANDOM

    每次引用该变量,就产生一个随机整数。随机数序列可以通过给RANDOM赋值来初始化。如果RANDOM被复位,即使随后再设置,它也将失去特定的属性

    REPLY

    当没有给read提供参数时设置

    SECONDS

    每次SECONDS被引用,将返回调用shell以来的秒数。如果给SECONDS赋一个值,以后引用返回的值将是赋值以来的秒数加上所赋的值。如果SECONDS被复位,即使随后再设置,它也将失去特定的属性

    SHELL

    当调用shell时,它扫描环境变量以寻找该名字。shell给PATH、PS1、PS2、MAILCHECK和IFS设置默认值。HOME和MAIL由login(1)设置

    SHELLOPTS

    包含一列开启的shell选项,比如braceexpand、hashall、monitor等

    SHLVL

    每启动一个bash实例时将其加1

    TMOUT

    设置退出前等待输入的秒数

    UID

    展开为当前用户的用户ID,在shell启动时初始化

    设置环境变量 如果想设置环境变量,就要在给变量赋值之后或设置变量时使用export命令(参见表13-15)。带-x选项的declare内置命令也可完成同样的功能(输出变量时不要在变量名前面加$)。

    表13-15  export命令和它的选项

    选    项

    --

    标志着选项末尾,余下的参数被视为变量

    -f

    名-值对被看作函数,而不是变量

    -n

    将一个全局(导出)变量转换成局部变量。之后该变量将不能被导出到子进程中

    -p

    显示所有的全局变量

    格式

    export变量=值

    变量=值; export变量

    declare –x 变量=值


    13.10.7  显示变量值

    echo命令  内置echo命令将它的参数显示到标准输出上。echo加-e选项,允许使用大量控制输出外观的转义序列。表13-16列出了echo选项和转义序列。

    表13-16  echo选项和转义序列

    选    项

    含    义

    -e

    允许解释下面列出的转义序列

    -E

    禁止解释这些转义字符,即使在那些默认解释它们的系统上(bash 2.x) 17

    -n

    删除输出结果中行尾的换行符

    转义序列

    /a

    报警(铃)

    /b

    退格

    /c

    不带换行符打印一行

    /f

    换页

    /n

    换行

    /r

    回车

    /t

    制表符

    /v

    纵向制表符

    //

    反斜杠

    /nnn

    ASCII码是nnn(八进制)的字符

    当使用转义序列时,不要忘记用-e开头。


    printf命令  printf 18的GNU版本可以用来编排打印输出的格式。它以和C printf函数相同的方式打印格式串。格式由一个串组成,它包含描述打印输出结果的格式指令。格式指令由带格式符(diouxXfeEgGcs)的%指定,%f代表一个浮点数,%d则代表一个(十进制)整数。

    要得到printf格式符的完整清单以及如何使用它们,可以在命令行键入:printf --help。键入printf --version就可以知道使用的printf是什么版本。如果使用的是bash 2.x,内置printf命令所用的格式和/usr/bin下的printf可执行程序完全一样。

    格式

    printf格式[参数…]

    范例13-58

    printf "%10.2f%5d/n" 10.5  25

    表13-17  printf命令的格式符

    格  式  符

    /"

    双引号

    /0NNN

    一个八进制字符,这里NNN代表0~3位

    //

    反斜杠

    /a

    报警或蜂鸣

    /b

    退格

    /c

    不产生更多的输出

    /f

    换页

    /n

    换行

    /r

    回车

                                        (续表)  

    格 式 说 明

    /t

    水平制表符

    /v

    垂直制表符

    /xNNN

    十六进制字符,这里NNN是1~3位

    %%

    单个百分号

    %b

    字符串参数,也对/转义字符进行解释

    范例13-59

    1   $ printf --version

        printf (GNU sh-utils) 1.16

    2   $ type printf

        printf is a shell builtin

    3   $ printf "The number is %.2f/n" 100

        The number is 100.00

    4   $ printf "%-20s%-15s%10.2f/n" "Jody" "Savage" 28

        Jody                Savage              28.00

    5   $ printf "|%-20s|%-15s|%10.2f|/n" "Jody" "Savage" 28

        Jody                |Savage          |    28.00|

    6   $ printf "%s's average was %.1f%%./n" "Jody" $(( (80+70+90)/3 ))

        Jody's average was 80.0%.

    说明 

    1. 显示printf命令的GNU版本。

    2. 如果使用的是bash 2.x,printf是一个内置命令。

    3. 按照说明符%.2f指定的格式,参数100以保留两位小数的浮点数形式输出。与C函数不同的是,这里不需要用逗号来分隔参数。

    4. 格式串指明将进行3个变换:第一个是%-20s(一个左对齐,长度为20的字符串),接着是%-15s(一个左对齐,长度为15的字符串),最后一个则是%10.2f(一个右对齐,长度为10的浮点数,其中的一个字符是句点,最后两个字符是小数点右边的两个数)。参数按对应%号的顺序被格式化,因此字符串Jody对应第一个%,字符串Savage对应第二个%,数字28则对应最后一个%号。

    5. 该行和第4行一样,唯一的区别是增加了竖杠以说明串是左对齐还是右对齐的。

    6. printf命令格式化字符串Jody和算术扩展的结果(请参见13.13节,“算术扩展”)。需要两个百分号(%%)才能输出一个百分号(%)。

    13.10.8  变量扩展修饰符

    我们可以用一些专用修饰符来测试和修改变量。修饰符首先提供一个简单的条件测试,用来检查某个变量是否已经被设置,然后根据测试结果给变量赋一个值。请参见表13-18列出的变量修饰符。

    表13-18  变量修饰符

    修  饰  符

    ${variable:-word}

    如果变量variable已被设置且非空,则代入它的值。否则,代入word

    ${variable:=word}

    已被设置且值非空,就代入它的值。否则,将variable的值设为word。始终代入variable的值。位置参量不能用这种方式赋值

    ${variable:+word}

    如果变量variable已被设置且值非空,代入word。否则,什么都不代入(代入空值)

    ${variable:?word}

    如果变量variable已被设置且值非空,就代入它的值。否则,输出word并且从shell退出。如果省略了word,就会显示信息:parameter null or not set

    ${variable:offset}

    获得变量variable值中位置从offset开始的子串,偏移为从0到串的末尾 19

    ${variable:offset:length}

    获得变量variable值中位置从offset开始长度为length的子串

    和冒号配合使用时,修饰符(-、=、+、?)检查变量是否尚未赋值或值为空。不加冒号时,值为空的变量也被认为已设置。

    范例13-60

    (临时替换默认值)

    1   $ fruit=peach

    2   $ echo ${fruit:–plum}

        peach

    3   $ echo ${newfruit:–apple}

        apple

    4   $ echo $newfruit

    5   $ echo $EDITOR       # More realistic example

    6   $ echo ${EDITOR:-/bin/vi}

        /bin/vi

    7   $ echo $EDITOR

    8   $ name=

        $ echo ${name-Joe}

    9   $ echo ${name:-Joe}

        Joe

    说明

    1. 将变量fruit的值设为peach。

    2. 这个专用修饰符将检查变量fruit是否已被设置。如果fruit已被设置,就显示它。否则,用plum替换fruit,并显示该值。

    3. 变量newfruit未曾被设置。值apple将暂时替换newfruit。

    4. 上一行的设置是暂时的,因此,变量newfruit仍未被设置。

    5. 环境变量EDITOR尚未被设置。

    6. 修饰符:-将/bin/vi替换为EDITOR。

    7. EDITOR未曾被设置过,因此什么都不会打印。

    8. 变量name被设为空值。因为修饰符前面没有冒号,变量即使为空也被认为是设置过的,所以没有把新的值Joe赋给变量name。

    9. 冒号使得修饰符检查变量是否未设置或为空。只要是这两种情况之一,就用值Joe替换name。

    范例13-61

    (永久替换默认值)

    1   $ name=

    2   $ echo  ${name:=Peter}

        Peter

    3   $ echo $name

        Peter

    4   $ echo ${EDITOR:=/bin/vi}

        /bin/vi

    5   $ echo $EDITOR

        /bin/vi

    说明

    1. 赋给变量name一个空值。

    2. 用修饰符:=将检查变量name是否尚未被设置。如果已经被设置过了,就不会被改变。如果尚未设置或值为空,就将等号右边的值赋给它。由于之前已将变量name设置为空,所以现在要把Peter赋给它。这个设置是持久的。

    3. 变量name的值还是Peter。

    4. 把变量EDITOR设置为/bin/vi。

    5. 显示变量EDITOR的值。

    范例13-62

    (临时替换值)

    1   $ foo=grapes

    2   $ echo ${foo:+pears}

        pears

    3   $ echo $foo

        grapes

        $

    说明

    1. 将变量foo的值设置为grapes。

    2. 专用修饰符:=将检查变量name是否已被设置。如果已经被设置过,就用pears暂时替换foo。否则,返回空。

    3. 变量foo的值还是原来的值。

    范例13-63

    (基于默认值创建错误信息)

    1   $ echo ${namex:?"namex is undefined"}

        namex: namex is undefined

    2   $ echo ${y?}

        y: parameter null or not set

    说明 

    1. 修饰赋:?检查变量是否已被设置。如果尚未设置该变量,就把问号右边的信息打印在标准错误输出上。如果此时是在执行脚本,就退出脚本。

    2. 如果问号后面没有提供报错信息,shell就向标准错误输出发送默认的消息。

    范例13-64

    (创建子串 20)

    1   $ var=notebook

    2   $ echo ${var:0:4}

        note

    3   $ echo ${var:4:4}

        book

    4   $ echo ${var:0:2}

        no

    说明

    1. 给变量赋值notebook。

    2. var的子串从偏移0(notebook中的n)开始,长度为4个字符,在e处结束。

    3. var的子串从偏移4(notebook中的b)开始,长度为4个字符,在k处结束。

    4. var的子串从偏移0(notebook中的n)开始,长度为2个字符,在o处结束。

    13.10.9  子串的变量扩展

    模式匹配变量用来在串首或串尾截掉串的某一特定部分。这些操作符最常见的用法是从路径头或尾删除路径名元素。如表13-19所示。

    表13-19  变量扩展子串

    表  达  式

    功    能

    ${变量%模式}

    将变量值的尾部与模式进行最小匹配,并将匹配到的部分删除

    ${变量%%模式}

    将变量值的尾部与模式进行最大匹配,并将匹配到的部分删除

    ${变量#模式}

    将变量值的头部与模式进行最小匹配,并将匹配到的部分删除

    ${变量##模式}

    将变量值的头部与模式进行最大匹配,并将匹配到的部分删除

    ${#变量}

    替换为变量中的字符个数。如果是*或@,长度则是位置参量的个数

    范例13-65

    1   $ pathname="/usr/bin/local/bin"

    2   $ echo ${pathname%/bin*}

        /usr/bin/local

    说明

    1. 给局部变量pathname赋值/usr/bin/local/bin。

    2. %删除路径名尾部包含模式/bin,后跟零个或多个字符的最小部分。即删除/bin。

    范例13-66

    1   $ pathname="usr/bin/local/bin"

    2   $ echo ${pathname%%/bin*}

        /usr

    说明

    1. 给局部变量pathname赋值/usr/bin/local/bin。

    2. %%删除路径名尾部包含模式/bin,后跟零个或多个字符的最大部分。即删除/bin/local/bin。

    范例13-67

    1   $ pathname=/home/lilliput/jake/.bashrc

    2   $ echo ${pathname#/home}

        /lilliput/jake/.bashrc

    说明

    1. 给局部变量pathname赋值/home/liliput/jake/.bashrc。

    2. #删除路径名头部包含模式/home的最小部分。路径变量开头的/home被删除。

    范例13-68

    1   $ pathname=/home/lilliput/jake/.bashrc

    2   $ echo ${pathname##*/}

        .bashrc

    说明

    1. 给局部变量pathname赋值/home/liliput/jake/.bashrc。

    2. ##删除路径名的头部包含零个或多个字符,直到并包括最后一个斜杠的最大部分。即从路径变量中删除/home/liliput/jake/。

    范例13-69

    1   $ name="Ebenezer Scrooge"

    2   $ echo  ${#name}

        16

    说明

    1. 给变量name赋值Ebenezer Scrooge。

    2. ${#variable}语法显示赋给变量name的字符串中字符的个数。字符串Ebenezer Scrooge中有16个字符。



    展开全文
  • PL/SQL 游标变量

    千次阅读 2012-06-01 15:19:56
    就其共性来说两者都是指向多行查询的结果集中的当前行。都要经历声明,打开,检索与关闭的过程。所不同的是游标与游标变量类似于常量与变量。游标是静态的,而游标变量是动态的,因为游标变量并不与某个特定的查询相...
  • shell 变量

    千次阅读 2012-08-22 16:53:36
    13.10 变量 13.10.1 变量类型 变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell中可用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是...
  • Oracle优化09-绑定变量

    千次阅读 2016-12-17 00:03:29
    思维导图系列博文Oracle-绑定变量binding variable解读Oracle-Soft Parse/Hard Parse/Soft Soft Parse解读概述绑定变量是OLTP系统中一个非常值得关注的技术点。良好的变量绑定会使OLTP系统数据库中的SQL执行的飞快,...
  • jenkins 内置变量

    千次阅读 2018-01-16 11:35:00
    Jenkins 有一些内置的变量可以使用。主要是: 邮件的配置变量,可以在发送邮件的时候使用。 环境变量 ...1. 邮件的配置变量 ...注意:xxx 是工作区目录的相对路径,不是绝对路径。 ${JOB_DESCRIPTION} - ...
  • Oracle-绑定变量binding variable解读

    千次阅读 2016-11-20 13:05:52
    绑定变量概述Oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会...
  • 【Bash百宝箱】shell环境变量有哪些

    千次阅读 2016-09-28 21:25:47
    HOME:当前用户主目录,也是内建命令cd不带参数时的目的路径,这个变量的值还用在波浪号扩展中。IFS:用来分隔字段的一组字符,例如空格、水平制表符、换行符,在shell扩展中用于分隔单词。MAIL:如果这个变
  • nginx变量机制

    千次阅读 2016-10-12 18:15:41
    初识变量 前面曾讲过nginx配置文件的解析过程,也...如果只是一些比较简单并且确定的功能配置需求,那么nginx用户能够很方便的做出相应的设定,比如用户想要设置工作进程数为2个,那么配置文件中这样写即可:worker_
  •  Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1) #将wb工作簿中第i个工作表的A1单元格区域扩充为一行,有应用痕迹列数(x)大小的区域,即A1:x1区域, 扩充后区域...
  • JS 基础之全局变量,局部变量

    千次阅读 2018-08-23 09:56:29
    本章将概要介绍一些编写高质量JavaScript的最佳实践、模式和习惯,比如避免全局变量、使用单var声明、预缓存循环中的length、遵守编码约定等等。本章还包括一些编程习惯,这些习惯跟具体的代码关系不大,而是更多...
  • C++变量类型的那些事

    千次阅读 2015-04-05 12:27:06
    C++变量类型的那些事同样的变量类型名在不同的机器 下的含义不一定相同,下C++标准规定的变量所对应的的最小尺寸。 类型 含义 最小尺寸 bool 布尔类型 未定义 char 字符 8位 wchar_t 宽字符 16位 char...
  • Rete快速匹配算法

    2009-03-22 22:33:00
    Rete算法首先是由c.L.Forgy在...模式匹配的基本概念 1、可满足规则:一个规则称为可满足的,若规则的每一模式均能在当前工作存储器中找到可匹配的事实,且模式之间的同一变量能取得统一的约束值。形式化地说,规则
  • RabbitMQ环境变量设置

    万次阅读 2017-11-28 11:12:58
    RabbitMQ的配置可以由三种方式进行定制。...环境变量 配置文件 运行时参数和策略 (1)环境变量: 定义端口、配置文件的位置(rabbitmq.config)和名值对(可以通过shell,也可以通过rabbitmq-env.conf)
  • shell内部变量

    千次阅读 2013-07-09 15:11:02
    $BASH_ENV 这个环境变量会指向一个Bash的启动文件,当一个脚本被调用的时候,这个启动文件将会被读取 $BASH_SUBSHELL 用来提示子shell的层次。 $BASH_VERSINFO[n] 一个含有6个元素的数组,它包含了所安装的Bash...
  • mysql系统变量详解

    千次阅读 2012-11-09 10:40:12
    mysqld服务器维护两种变量。全局变量影响服务器的全局操作。会话变量影响具体客户端连接相关操作。 服务器启动时,将所有全局变量初始化为默认值。可以在选项文件或命令行中指定的选项来更改这些默认值。服务器...
  • shell变量的类型

    万次阅读 2011-05-16 08:58:00
    <br />变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell中可用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。...
  • 1、关键字static的作用是什么?  定义静态变量  2、static有什么用途?(请至少说明两种)  ...(1)对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;  (2)全局变量用static声明,
  • MySql环境变量说明

    千次阅读 2013-02-27 21:13:35
    服务器将维护许多表示其配置的系统变量。所有变量均有默认值。可以在命令行中或选项文件设置选项在服务器启动时对它们进行设置。大多数可以在运行时使用SET语句来设置。 mysqld服务器维护两种变量。全局变量影响...
  • 《算法导论》一书中有一句话,我认为说的非常透彻:“这两个程序有很多相似之处,因为它们都是一个字符串对模式P的匹配:KMP-MATCHER是文本T针对模式P的匹配,COMPUTE-PREFIX是模式P针对自己的匹配。”
  • 默认情况下bash shell会用一些特定的环境inal来定义系统环境。用户可以使用Linux系统上默认定义的环境变量。bash shell是由Unix Bourne shell衍生出来的,所以它保留了后者中定义的环境变量... 当前用户的主目录 ...
  • 工作中有时后会需要将局部变量写成成员变量,快捷键是 ctrl+alt+f 光标放在变量上 ctrl+alt+f ; 导入我的setting文件 链接:https://pan.baidu.com/s/1exKknWhoKof0bxU9ad_Ueg 提取码:top9 导入后试试 fivd ...
  • JavaScript常见变量和函数命名示例

    万次阅读 2020-07-21 15:16:17
    本文将通过大量的实例来试图自圆其说,形成一套系统化、实用的变量命名理化体系。通过按JavaScript的数据类型分类着手、细到一个函数的参数命名,并提供众多可选方案,并尽量给出其适用范围和利弊。 JavaScript常见...
  • 模板匹配

    千次阅读 2015-07-25 20:18:18
    模板匹配是数字图像处理的重要组成部分之一。把不同传感器或同一传感器在不同时间、 不同成像条件下对同一景物获取的两幅或多幅图像在空间上对准,或根据已知模式到另一幅 图中寻找相应模式的处理方法就叫做模板...
  • bash shell一些环境变量

    2016-05-22 20:12:14
    BASH 扩展到用于调用bash实例的完整文件名。BASHOPTS 启用shlell选项的冒号分隔的列表。列表中的每个词都是-s选项shopt内建命令的有效参数。出现在BASHOPTS的选项...扩展为当前bash进程的进程ID。这不同于$$在某些
  • windows环境变量 set使用

    千次阅读 2010-12-31 09:59:00
    windows环境变量 set使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,942
精华内容 63,176
关键字:

当前工作区没有匹配的变量