Bash检查字符串是否包含其他字符串

mac*_*ery 55 bash

${testmystring}我的.sh脚本中有一个字符串,我想检查这个字符串是否包含另一个字符串.

    if [[ ${testmystring} doesNotContain *"c0"* ]];then
        # testmystring does not contain c0
    fi 
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,即什么是NotContain应该是什么?

cyc*_*hoi 87

使用!=.

if [[ ${testmystring} != *"c0"* ]];then
    # testmystring does not contain c0
fi
Run Code Online (Sandbox Code Playgroud)

有关help [[更多信息,请参阅

  • 我同意它们对于上面显示的例子来说是多余的.但是如果变量名和模式字符串变得越来越复杂(例如:在模式字符串中包含空格),则引用它们是必要的.无论如何,引用它们通常没有害处.:) (7认同)
  • `{}`和`c0`周围的引号是多余的。 (2认同)
  • 确实,这并没有什么害处,如果你喜欢打字,那就把自己打垮吧!抱歉,我知道这很迂腐,只是我发现人们经常死记硬背地使用像“{}”这样的东西,而不理解什么时候需要它们,什么时候不需要它们(我确实支持你)。 (2认同)
  • @Randyman99:虽然我同意你的目标,但我不相信当你不理解他们做什么时添加多余的字符可以发展良好的编程实践。这就是我的观点——太多人因为货物文化而使用它们,而他们从来不知道它们的实际用途——这不是好的编程实践。防御性编程是好的,无意识的编程是不好的。这是一位从事专业编程五十年之久的人说的。 (2认同)

小智 6

正如mainframer所说,你可以使用grep,但我会使用退出状态进行测试,试试这个:

#!/bin/bash
# Test if anotherstring is contained in teststring
teststring="put you string here"
anotherstring="string"

echo ${teststring} | grep --quiet "${anotherstring}"
# Exit status 0 means anotherstring was found
# Exit status 1 means anotherstring was not found

if [ $? = 1 ]
then
  echo "$anotherstring was not found"
fi
Run Code Online (Sandbox Code Playgroud)

  • 你正在用大炮杀死一只蚊子 (17认同)
  • Jahid 可能是对的,但是,如果有人执意采用这种方法,这个单行代码会更紧凑:````if echo $teststring | grep -q $另一个字符串;然后回显“找到”;否则回显“未找到”;菲```` (2认同)

小智 6

Bash 允许您使用 =~ 来测试是否包含子字符串。因此,使用 negate 将允许进行相反的测试。

fullstring="123asdf123"
substringA=asdf
substringB=gdsaf
# test for contains asdf, gdsaf and for NOT CONTAINS gdsaf 
[[ $fullstring =~ $substring ]] && echo "found substring $substring in $fullstring"
[[ $fullstring =~ $substringB ]] && echo "found substring $substringB in $fullstring" || echo "failed to find"
[[ ! $fullstring =~ $substringB ]] && echo "did not find substring $substringB in $fullstring"
Run Code Online (Sandbox Code Playgroud)

  • 我认为`[[!$fullstring =~ $substringB ]]` 是这个问题最合适的答案。谢谢 (3认同)