Expression1
{ (.*/)"`
只要 $FLAG shell
变量前面有连字符,就会除去连字符。冒号运算符给出 FLAG 变量的一部分,该变量由在
/( 和 /) 字符(反斜杠,开括号和反斜杠,闭括号)中间的子表达式匹配。如果您忽略
/( 和 /)
子表达式字符的话,冒号运算符会给出匹配的字符数目。
如果 $FLAG 变量设置成
-(连字符),那么该命令会显示一个语法错误消息。这是因为 shell 会将 $FLAG 变量的值替换,在运行
expr 命令之前。expr
命令不知道连字符是一个变量的值。它只能理解:
- : -*/(.*/)
并且它会将第一个连字符解释成减号运算符。要消除这种问题,请使用:
FLAG=`expr "x$FLAG" : "x-*/(.*/)"`
要想使用 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
特殊文件,而废弃该表达式的结果。如果您没有对它重新定向,结果就会写到标准输出中,通常是您的工作站显示器。
考虑以下表达式:
expr "$STR" = "="
如果 $STR 变量有值为 = (等号),那么在 shell
处理完此命令之后,expr 命令会看到表达式:
= = =
expr
命令将此解释成在一行中的三个等号运算符,并显示一个语法出错消息。一旦 shell 变量的值与
expr 运算符中的一个相同,这种情况就会发生。避免这种问题的方法是,将该表达式写成:
expr "x$STR" = "x="
要想返回 $SHELL 环境变量 /usr/bin/ksh
的长度,请输入:
expr length $SHELL
显示以下内容:
12
要想返回 "de" 字符串中的任何一个字符在 "abcdef"
中出现的第一个位置,请输入:
expr index abcdef de
显示以下内容:
4
要想返回 "fd" 字符串的任何字符在 "abcdef"
中出现的第一个位置,请输入:
expr index abcdef fd
显示以下内容:
4
要想返回 "Goodnight Ladies" 字符串中从位置
11 开始的 6 个字符长的字符串,请输入:
expr substr "Goodnight Ladies" 11 6
显示以下内容:
Ladies