Как проверить, содержит ли строка подстроку и нет ли в Bash - PullRequest
0 голосов
/ 31 августа 2018

Я хочу использовать оператор switch / case в bash, чтобы проверить, содержит ли имя файла, являющееся строкой, что-то, но не содержит.

Вот мой случай:

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

Но в настоящее время это не работает, как я могу узнать, соответствует ли строка "Failed", но также не содержит "cp"?

Было бы здорово, если бы это можно было сделать и в коммутаторе / корпусе

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

В качестве альтернативы вы можете использовать if и трубы, например:

if echo 'Failed' | grep -v cp | grep -q Failed ; then
    echo Failed without cp
else
    echo It's either Winned or cp.
fi
0 голосов
/ 31 августа 2018

! должен сопровождаться списком в скобках, а не самим шаблоном.

| в случае для ИЛИ, а не И. Чтобы получить И, вы должны вкладывать случаи.

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

Или вы можете просто использовать if вместо case:

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