打印 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
;该选项会禁用一些您基本上不想体验的围绕反斜杠的遗留行为。
我们需要编写一个 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
;该选项会禁用一些您基本上不想体验的围绕反斜杠的遗留行为。