我不明白 expr 命令的输出

我不明白 expr 命令的输出

当我运行此代码时

#!/usr/bin/bash
str="I am enjoying this day to the fullest !"
x="this"
y=`expr index "$str" "$x"`
z=${str:`expr $y - 1`:5}
echo $x
echo $y
echo $z

输出是这样的

this
11
ing t

所以我想知道为什么会这样。我该如何解决这个问题?

答案1

索引搜索字符。也许您想要匹配?

尝试

#!/bin/bash
str="I am enjoying this day to the fullest !"
x="this"
y=$(expr  "$str" : ".*$x" - length "$x")
z=${str:$y:${#x}}
echo $x
echo $y
echo $z

: 运算符是锚定正则表达式匹配运算符。要匹配的模式是“。”(任意字符)“*”零个或多个,后跟 $x 中的字符串(注意:这不应包含未转义的正则表达式字符)

这部分将返回匹配的强的长度,即从字符串开头(“锚定”)到 $x 中字符串结尾的字符数。

下一部分减去 $x 的长度,得出 $str 中到 $x 第一个字符的偏移量。这可以替换为 ${#x},如下行所示。

相关内容