Linux 如何在Bash中检查字符串是否包含子字符串且不包含子字符串

Linux 如何在Bash中检查字符串是否包含子字符串且不包含子字符串,linux,bash,shell,unix,switch-statement,Linux,Bash,Shell,Unix,Switch Statement,我想在bash中使用switch/case语句来检查作为字符串的文件名是否包含某些内容,但也不包含这些内容 我的情况如下: case "$fileName" in *Failed|!cp*) echo "match" ;; esac 但这在当前不起作用,如何查看字符串是否匹配“Failed”,但也不包含“cp” 如果这也可以在交换机/机箱中完成,那就太好了后面必须跟一个带括号的模式列表,而不是模式本身 |在case中是for OR,not AND。为了得到和得到

我想在bash中使用switch/case语句来检查作为字符串的文件名是否包含某些内容,但也不包含这些内容

我的情况如下:

case "$fileName" in
    *Failed|!cp*)
       echo "match"
     ;;
esac
但这在当前不起作用,如何查看字符串是否匹配“Failed”,但也不包含“cp”


如果这也可以在交换机/机箱中完成,那就太好了

后面必须跟一个带括号的模式列表,而不是模式本身


|
在case中是for OR,not AND。为了得到和得到,你应该嵌套案例

case "$fileName" in
    *Failed)
        case "$fileName" in
            cp*) ;;
            *) echo "match" ;;
        esac
     ;;
esac
或者您可以使用
if
而不是
case

if [[ $filename = *Failed && $filename != cp* ]]
then echo match
fi

或者,您可以使用
if
和管道,例如:

if echo 'Failed' | grep -v cp | grep -q Failed ; then
    echo Failed without cp
else
    echo It's either Winned or cp.
fi

什么是“extglob”选项?扩展的全局语法。
|
在一个案例中是for或,not AND。我如何做AND?可能的重复也请参见,(U&L.SE),(SO),(AskU)等。