在 Linux 中,我们可以使用 expr
命令对字符串做一些处理。例如:
-
expr index STRING CHARS
获取指定字符在字符串中的位置 -
expr substr STRING POS LENGTH
从字符串中获取到子字符串 -
expr length STRING
获取字符串的长度
expr index STRING CHARS
查看 man expr 对 index STRING CHARS
表达式说明如下:
index STRING CHARS
index in STRING where any CHARS is found, or 0
即,expr index STRING CHARS
命令可以获取 CHARS 包含的任意字符在 STRING 字符串中第一次出现的位置。
位置偏移是从 1 开始数起,不是从 0 开始。
如果 CHARS 包含的所有字符都没有找到,返回为 0。
当 STRING 字符串的内容包含空格时,要用双引号括起来,否则会报错。
注意:expr index STRING CHARS
命令并不是查找 CHARS 子字符串在 STRING 字符串中的位置。
它只能查找单个字符在 STRING 字符串中的位置。
只是 CHARS 可以指定要查找哪几个字符,并以第一个查找到的字符为准。
具体举例说明如下:
$ value="This is a test string."
$ expr index $value a
expr: syntax error
$ expr index "$value" a
9
$ expr index "$value" p
0
$ expr index "$value" "test"
4
$ expr index "$value" "est"
4
可以看到,由于 value 变量值包含空格,当使用 $value
、没有加双引号时,命令执行报错。
使用 "$value"
、加了双引号后,没有报错。
expr index "$value" a
命令返回 a
字符在 value 变量值中的位置是 9,位置偏移从 1 开始。
由于 p
字符在 value 变量值中不存在,expr index "$value" p
返回为 0。
expr index "$value" "test"
命令并不是返回 "test" 子字符串在 value 变量值中的位置。
而是返回 t
、e
、s
这三个字符的任意一个在 value 变量值中第一次出现的位置。
那么第一次出现的字符是 s
,位于开头的 "This" 子字符串,从 1 开始数起,是第 4 个字符,所以该命令返回为 4。
由于是查找多个字符中的任意一个字符,跟提供的字符先后顺序无关。
所以 expr index "$value" "est"
命令也是返回 4。
并不因为 "est" 参数的 e
字符在 s
字符前面就优先查找 e
字符。
expr substr STRING POS LENGTH
查看 man expr 对 substr STRING POS LENGTH
表达式说明如下:
substr STRING POS LENGTH
substring of STRING, POS counted from 1
即,expr substr STRING POS LENGTH
命令从 STRING 字符串的第 POS 个字符开始,一直获取 LENGTH 个字符,得到一个子字符串。
位置偏移从 1 开始,不是从 0 开始。
当 STRING 字符串的内容包含空格时,要用双引号括起来,否则会报错。
具体举例说明如下:
$ value="This is a test string."
$ expr substr "$value" 6 2
is
$ expr substr "$value" 11 4
test
可以看到,expr substr "$value" 6 2
命令从 value 变量值的第 6 个字符开始,获取包括该字符在内的两个字符,得到 "is" 子字符串。 expr substr "$value" 11 4
命令的执行结果类似。
expr length STRING
查看 man bash 对 length STRING
表达式说明如下:
length STRING
length of STRING
即,expr length STRING
获取 STRING 字符串的长度。长度从 1 开始。
当 STRING 字符串的内容包含空格时,要用双引号括起来,否则会报错。
具体举例说明如下:
$ value="come on"
$ expr length "$value"
7
$ expr length $value
expr: syntax error
可以看到,value 变量值带有空格。
当 $value
没有用双引号括起来时,expr length $value
命令执行报错。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。