问:
在 Bash 中一个字符串如下:
bash
string="My string"
如何测试它是否包含另一个字符串?
bash
if [ $string ?? 'foo' ]; then
echo "It's there!"
fi
其中 ?? 是我不知道的运算符。我该使用 echo 和 grep 吗?
bash
if echo "$string" | grep 'foo'; then
echo "It's there!"
fi
这看起来有点笨拙。
答1:
我不确定是否可以使用 if 语句,但你可以使用 case 语句得到类似的效果:
bash
case "$string" in
*foo*)
# Do stuff
;;
esac
答2:
如果使用双方括号,也可以在 case 语句之外使用 Marcus 的答案(* 通配符):
bash
string='My long string'
if [[ $string == *"My long"* ]]; then
echo "It's there!"
fi
请注意,中间有空格的字符串需要放在双引号之间,* 通配符应该在外面。还要注意,这里使用了一个简单的比较操作符(即 ==),而不是正则表达式操作符 =~。
答3:
如果你更喜欢正则表达式的方法:
bash
string='My string';
if [[ $string =~ "My" ]]; then
echo "It's there!"
fi
更多解决思路的回答参考:https://stackoverflow.com/a/20460402
简单的函数:
bash
stringContain() { [ -z "$1" ] || { [ -z "${2##*$1*}" ] && [ -n "$2" ];};}
这样可以测试空字符串的情况:
bash
$ if stringContain '' ''; then echo yes; else echo no; fi
yes
$ if stringContain 'o "M' ''; then echo yes; else echo no; fi
no
参考:stackoverflow question 229551
相关阅读: