我们需要编写一个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
;该选项禁用了一些关于反斜杠的遗留行为,这些行为基本上是你永远不想经历的。