用途

求表达式变量的值。

语法

expr Expression

描述

expr 命令读入 Expression 参数,计算它的值,然后将结果写入到标准输出。

您必须对 Expression 参数应用以下规则:

整数前面可以放一个一元连字符。在内部,整数被当作 32 位,双互补数。

注:expr 命令返回一个 0 来指示一个零值,而不是空字符串。

以下项描述了 Expression 参数的运算符和关键字。需要转义的字符由一个 \ (反斜杠) 放在前面。这些项按照优先权递增的顺序列出,具有相等的优先权的运算符分组在 {} (大括号) 中:

Expression1 \| Expression2 返回 Expression1如果它不是空值或者 0 值的话,否则返回 Expression2。
Expression1 \& Expression2 返回 Expression1如果两个表达式都不是空值或者 0 值,否则返回一个 0 值。
Expression1 { =, \>, \>=, \<, \<=, != } Expression2 如果两个表达式都是整数,返回整数比较的结果;否则它返回的是字符串比较的结果。
Expression1 {+, - } Expression2 整数值变量的加或者减。
Expression1 { \*, /, % } Expression2 整数值变量的乘、除或者提供除法的余数。
Expression1 : Expression2 将 Expression1 的运算得到的字符串与Expression2 的运算结果的正则表达式模式进行比较。正则表达式语法与 ed 命令相同,除了所有的模式固定到字符串的开始之外(也就是说,只有以字符串的第一个字符开始的序列才被正则表达式匹配)。因此 ^ (插入符号) 在这种情况下就不是特殊字符。

一般地,匹配运算符返回匹配的字符个数(失败的时候返回 0)。如果模式包含了一个子表达式,也就是:

\( Expression \)

则会返回包含了实际匹配的字符的字符串。

整理顺序可以定义在字符范围内使用的等价类。有关整理顺序和等价类的更多信息,请参阅《AIX V6.1 本地语言支持指南与参考大全》中的『了解语言环境的环境变量』。

注: 以下字符串变量会超过标准,其行为可能在不同的操作系统中会有不同。这些字符串变量是“不”可移植的。

match String1 String2 与 Expression1 : Expression2 相同。
length String1 返回 String1 的长度。
index String1 String2 返回 String1 中包含 String2 中任意字符的第一个位置。
substr String1 StartPosition Length
                          返回一个以 StartPosition 的字符开始的在 String1 中的字符串,并且是Length 长度的字符串。

退出状态

此命令返回以下退出值:

0 Expression 参数运算值既不为空也不为 0。
1 Expression 参数的计算值或者为空或者为 0。
2 Expression 参数无效。
>2 发生错误。

注:在 shell 处理完参数后,expr 命令除了利用数值外不能区分运算符和操作数。因此,如果 $a 的值是 j 的话,命令:

expr $a = j

就像:

expr j = j

在 shell 将所有的参数都传给 expr 命令之后。以下情况也为 true:

expr X$a = Xj

示例

  1. 要修改一个 shell 变量,请输入:

    COUNT=`expr $COUNT + 1`

    这会加 1 到 shell 变量 $COUNT 上。 expr 命令以 grave accent 包装,这会导致 shell 将 expr 命令的标准输出替换到 COUNT= 命令的标准输出。$COUNT 变量使用前必须初始化。

  2. 要想得到 $STR shell 变量的长度,请输入:
    LENGTH=`expr $STR : ".*"`

    这会将 LENGTH 变量设置成由 :(冒号)运算符给出的值。.*(点,星号)模式会对任何字符串从头到尾去匹配,因此冒号运算符给出 $STR 变量的长度作为匹配字符的数目。注,.* 必须在引号内,来防止 shell 将 *(星号)处理成模式匹配字符。引号不是模式中的一部分。

    如果 $STR 变量设置成空字符串或者包含了任何空格(空白或者制表键)的话,那么该命令会显示错误消息 expr: syntax error。这是因为 shell 通常不会将空字符串传递给命令。在这种情况下,expr 命令只能看见:

    :.*

    shell 还会除去单个的引号。不起作用的原因是因为冒号运算符要求有两个值。此问题可以通过将 shell 变量以双引号括起来解决:

    LENGTH=`expr "$STR" : ".*"`

    现在,如果 $STR 变量的值为空的话,LENGTH 变量被设置成 0 值。通常我们推荐将 shell 变量用双引号括起来。不要将 shell 变量用单引号标记括起来。

  3. 要想使用一个字符串的一部分,请输入:
    FLAG=`expr "$FLAG" : "-*\(.*\)"`

    只要 $FLAG shell 变量前面有连字符,就会除去连字符。冒号运算符给出 FLAG 变量的一部分,该变量由在 \( 和 \) 字符(反斜杠,开括号和反斜杠,闭括号)中间的子表达式匹配。如果您忽略 \( 和 \) 子表达式字符的话,冒号运算符会给出匹配的字符数目。

    如果 $FLAG 变量设置成 -(连字符),那么该命令会显示一个语法错误消息。这是因为 shell 会将 $FLAG 变量的值替换,在运行 expr 命令之前。expr 命令不知道连字符是一个变量的值。它只能理解:

    - : -*\(.*\)

    并且它会将第一个连字符解释成减号运算符。要消除这种问题,请使用:

    FLAG=`expr "x$FLAG" : "x-*\(.*\)"`
  4. 要想使用 expr 命令在 if 语句中,请输入:
    if expr "$ANSWER" : "[yY]" >/dev/null
    那么返回 ANSWER 以 "y" 或 "Y" 开始fi

    如果 $ANSWER 变量以 y 或 Y 开始的话,if 语句的 then 部分会执行。如果匹配成功表达式的结果为 1,并且 expr 命令会返回一个为 0 的出口值,此出口值被 if 语句识别成逻辑值 True。如果匹配失败,结果为 0,出口值为 1。

    将 expr 命令的标准输出重新定向到 /dev/null 特殊文件,而废弃该表达式的结果。如果您没有对它重新定向,结果就会写到标准输出中,通常是您的工作站显示器。

  5. 考虑以下表达式:
    expr "$STR" = "="

    如果 $STR 变量有值为 =(等号),那么在 shell 处理完此命令之后,expr 命令会看到表达式:

    = = =

    expr 命令将此解释成在一行中的三个等号运算符,并显示一个语法出错消息。一旦 shell 变量的值与 expr 运算符中的一个相同,这种情况就会发生。避免这种问题的方法是,将该表达式写成:

    expr "x$STR" = "x="
  6. 要想返回 $SHELL 环境变量 /usr/bin/ksh 的长度,请输入:
    expr length $SHELL

    显示以下内容:

    12
  7. 要想返回 "de" 字符串中的任何一个字符在 "abcdef" 中出现的第一个位置,请输入:
    expr index abcdef de

    显示以下内容:

    4
  8. 要想返回 "fd" 字符串的任何字符在 "abcdef" 中出现的第一个位置,请输入:
    expr index abcdef fd

    显示以下内容:

    4
  9. 要想返回 "Goodnight Ladies" 字符串中从位置 11 开始的 6 个字符长的字符串,请输入:
    expr substr "Goodnight Ladies" 11 6

    显示以下内容:

    Ladies

文件

/usr/bin/expr 包含了 expr 命令。

Linux expr 命令详解相关推荐

  1. linux sed p变量,Linux sed 命令详解系列教程之各种问题解决

    本文目录: 1 sed中使用变量和变量替换的问题 2 反向引用失效问题 3 "-i"选项的文件保存问题 4 贪婪匹配问题 5 sed命令"a"和"N& ...

  2. 【网络编程】Linux tcpdump命令详解---编辑中

    目录 即看即用 详细说明 简介 输出信息含义 链路层头 TCP 数据包 UDP 数据包 SMB/CIFS 解码 AFS 请求和回应 KIP AppleTalk协议 IP 数据包破碎 时间戳 反向过滤 ...

  3. linux mingetty 命令详解

    linux mingetty 命令详解 功能说明:精简版的getty. 语 法:mingetty [--long-hostname][--noclear][tty] 补充说明:mingetty适用于本 ...

  4. linux zip 命令详解

    功能说明:压缩文件.  语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期 ...

  5. linux zipinfo 命令详解

    linux zipinfo 命令详解 功能说明:列出压缩文件信息. 语 法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x <范本样式>] 补充说明:执行zi ...

  6. Linux chkconfig命令详解

    Linux chkconfig命令详解 (2011-03-07 15:49:04) 转载 标签: linux shell chkconfig 杂谈 分类: 工作*Linux chkconfig:    ...

  7. linux uname 命令详解

    linux uname 命令详解 功能说明:显示系统信息. 语 法:uname [-amnrsv][--help][--version] 补充说明:uname可显示电脑以及操作系统的相关信息. 参 数 ...

  8. linux mread 命令详解

    linux mread 命令详解 功能说明:将MS-DOS文件复制到Linux/Unix的目录中. 语 法:mread [MS-DOS文件...][Linux文件或目录] 补充说明:mread为mto ...

  9. linux sort 命令详解

    linux sort 命令详解 sort命令的功能是对文件中的各行进行排序.sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的.实际上,sort命令可以被认为 ...

最新文章

  1. iOS下JS与OC互相调用(三)--MessageHandler
  2. VMware 主机基板管理控制器的状态
  3. ESP8266、ESP32 和 ESP32-S2 对比
  4. django ajax 简书,Django_ajax
  5. Java 分支与循环
  6. FISCO BCOS (六)———ubantu安装mysql5.7
  7. JavaScript中的关系运算符和逻辑运算符
  8. python处理wps表格数据匹配_wps2个excel表格数据匹配-Wps表格怎么自动匹配我需要的数值...
  9. linux系统学文档pdf,Linux操作系统学习.pdf
  10. Hugo Travis
  11. 渐进式web应用程序_为什么渐进式Web应用程序很棒,以及如何构建一个
  12. 前列腺穿刺活检技术发展
  13. fliggy 十三姨
  14. Android音频开发之OpenSL ES
  15. D3D11、D3D12开发中CreateSwapChain返回DXGI_ERROR_INVALID_CALL(0x887A0001)错误的坑
  16. 锁相环PLL --原理浅析
  17. java 对某个文件改名_java中给文件改名
  18. YaCy—基于P2P的分布式开源搜索引擎
  19. php 图片扭曲,把一张图片变形扭曲成各种不同的长宽
  20. yjk计算书_yjk计算书

热门文章

  1. [LeetCode Python3]77. Combinations回溯
  2. 麻省理工学院、南加大等美国名校的网络安全:勉强及格
  3. 个人智库服务的建立与选型
  4. 程旭:CPU方寸上的中国信念
  5. 除了糖和奶,咖啡里加这些也好喝
  6. 京津冀计算机考研院校2021与2022招生人数对比
  7. gulp构建项目(三):gulp-watch监听文件改变、新增、删除
  8. 【JavaScript】select 事件监听及选中
  9. ubuntu16安装python3.6
  10. 英语学习详细笔记(七)不定式