【发布时间】:2014-09-05 09:21:50
【问题描述】:
在 shell 脚本中,我如何确定一个字符串是否包含在另一个字符串中。 在 bash 中,我只会使用 =~,但我不确定如何在 /bin/sh 中做同样的事情。有可能吗?
【问题讨论】:
在 shell 脚本中,我如何确定一个字符串是否包含在另一个字符串中。 在 bash 中,我只会使用 =~,但我不确定如何在 /bin/sh 中做同样的事情。有可能吗?
【问题讨论】:
你可以使用case语句:
case "$myvar" in
*string*) echo yes ;;
* ) echo no ;;
esac
您所要做的就是用string 替换您需要的任何东西。
例如:
case "HELLOHELLOHELLO" in
*HELLO* ) echo "Greetings!" ;;
esac
或者,换一种说法:
string="HELLOHELLOHELLO"
word="HELLO"
case "$string" in
*$word*) echo "Match!" ;;
* ) echo "No match" ;;
esac
当然,您必须注意 $word 不应包含魔法 glob 字符,除非您打算进行 glob 匹配。
【讨论】:
*,两边都很重要,必须在那里。
myvar 和 myothervar 倒退。
你可以定义一个函数
matches() {
input="$1"
pattern="$2"
echo "$input" | grep -q "$pattern"
}
获取正则表达式匹配。注意:用法是
if matches input pattern; then
(没有[ ])。
【讨论】:
if echo "$input" | grep -q "$pattern"; then,但这并不是真正的shell解决方案。
你可以试试 在“这是一个测试”中查找“他的”
TEST="This is a test"
if [ "$TEST" != "${TEST/his/}" ]
then
echo "$TEST"
fi
【讨论】: