ZSH düzenli ifade testini nasıl olumsuzlayabilirim?


6

ZSH regex operatörünü nasıl olumsuzlayabilirim?

Gibi bir şey yapmak istiyorum:

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

...veya:

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

... ama ZSH herhangi bir regex olumsuzlama operatörü uygular gibi görünmüyor Bundan daha kolay bir yolu var mı:

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

Teşekkürler!


Zsh'ın nasıl çalıştığından emin değilim, ancak regex'i deneyebilirsiniz: '^(?!myhost[0-9]+$).+$'Hepsi ile eşleşmeli myhost[0-9]+.
Jerry

Cevabı kendin verdin. Sizin ikinci teklifi sadece ünlem işaretinden sonra bir boş cevapsız, doğrudur: if [[ ! ($host =~ '^myhost[0-9]+$') ]].
mpy

Teşekkürler, @mpy! Zsh'ın (ve tüm kabukları, AFAIK) koşul ifadelerinde boşluklara duyarlılığını unuttum.
Stephen

Yanıtlar:


9

Testin tamamını bir olumsuzlama en kolay olacaktır. Çoğunlukla, hatırlanması kolay ve herhangi bir özel koşul sözdizimine bağlı olmadığından:

if ! [[ $host =~ '^myhost[0-9]+$' ]]
then
    # Do stuff
    # ...
fi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.