在Bash中打印字符串中子字符串的索引



我们需要编写一个shell程序来告诉子字符串在给定字符串中的位置(即索引)。

示例字符串:

Code Quotient - Get Better at Programming

子字符串:

at
样本输出:

28

我已经写了下面的程序,但它在每种情况下都给出了-1

#!/bin/bash
read a
read b
if [[ "$a" == "$b" ]]; then
rest=${a#*$b}
echo $(( ${#a} - ${#rest} - ${#b} +1 ))
else
echo "-1"
fi

您正在检查两个字符串是否相等,当然大多数情况下它们不是相等的。

if [[ "$a" == "$b" ]]

可能你的意思是

if [[ $a == *"$b"* ]]

可能还注意到[[在引用时更放松。

还要注意,文件的前两个字节需要为#!,以便第一行是有效的shebang;您将显示缩进一个空格,这将不起作用。

read更好的设计是接受参数作为命令行参数;然后,用户获得命令行历史、变量、TAB扩展等好处。

#!/bin/bash
if [[ $1 == *"$2"* ]]; then
rest=${1#*$2}
echo $(( ${#1} - ${#rest} - ${#2} +1 ))
else
echo "-1"
fi

如果你使用read,最好使用read -r;该选项禁用了一些关于反斜杠的遗留行为,这些行为基本上是你永远不想经历的。

相关内容

  • 没有找到相关文章

最新更新