linux - 如何检查字符串是否包含子字符串并且 Bash 中不包含子字符串

标签 linux bash shell unix switch-statement

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

这是我的案例:

case "$fileName" in
    *Failed|!cp*)
       echo "match"
     ;;
esac

但这目前不起作用,我如何查看字符串是否匹配“Failed”但不包含“cp”?

如果这也可以在开关/shell 中完成,那就太好了

最佳答案

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

| 在一个案例中代表 OR,而不是 AND。要获得 AND,您应该嵌套案例。

case "$fileName" in
    *Failed)
        case "$fileName" in
            cp*) ;;
            *) echo "match" ;;
        esac
     ;;
esac

或者您可以只使用 if 而不是 case:

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

关于linux - 如何检查字符串是否包含子字符串并且 Bash 中不包含子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52113721/

相关文章:

linux - xslt 产生的结果不以回车符(换行符)结尾

linux - 无法将文件从 docker 容器复制到主机

linux - shell 脚本 : How to enforce display of previous query if a statement is true?

python - cron 作业不输出到 nohup.out

Linux VM 中的 Azure DevOps VM 规模集部署

linux - ksh + 不规则的 ksh 语法以支持 float

linux - 是否可以在 OS X 中编译 linux 内核(用于 BeagleBone)?

c - 查询 MAP_PRIVATE

arrays - 将制表符分隔的字符串拆分为 bash 中的数组

linux - Rsync 从本地文件夹到 NAS 并在之后删除内容