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!


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.