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

Print the index of a substring in a string in 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;你显示你的缩进了一个 space,这是行不通的。

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

#!/bin/bash

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

如果你使用read,可能会使用read -r;该选项会禁用一些您基本上不想体验的围绕反斜杠的遗留行为。