Jak zanegować test wyrażenia regularnego ZSH?

6

Jak negować operatora wyrażeń regularnych ZSH?

Chciałbym zrobić coś takiego:

if [[ $host !~ '^myhost[0-9]+$' ]]
then
    # Do stuff
    # ...
fi

...lub:

if [[ !($host =~ '^myhost[0-9]+$') ]]
then
    # Do stuff
    # ...
fi

... ale nie wygląda na to, że ZSH implementuje dowolnego operatora negacji wyrażeń regularnych. Czy jest łatwiejszy sposób niż ten:

if [[ $host =~ '^myhost[0-9]+$' ]]
then
else
    # Do stuff
    # ...
fi

Dzięki!

Stephen
źródło
Nie wiem, jak działa zsh, ale możesz spróbować wyrażenia regularnego: '^(?!myhost[0-9]+$).+$' Powinien pasować do wszystkich, ale myhost[0-9]+.
Jerry
Sam dałeś odpowiedź. Twoja druga propozycja jest poprawna, brakowało tylko spacji po wykrzykniku: if [[ ! ($host =~ '^myhost[0-9]+$') ]].
mpy
Dzięki, @mpy! Zapomniałem o wrażliwości zsh (i wszystkich powłok, AFAIK) na spacje w instrukcjach warunków.
Stephen

Odpowiedzi:

9

Negacja całego testu byłaby najłatwiejsza. Głównie dlatego, że jest łatwy do zapamiętania i nie zależy od konkretnej składni warunku:

if ! [[ $host =~ '^myhost[0-9]+$' ]]
then
    # Do stuff
    # ...
fi
slhck
źródło