当我运行此代码时
#!/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},如下行所示。