SORU
27 Aralık 2010, PAZARTESİ


Nasıl bir bash betiği içinde düzenli ifadeler ile bir test inkar edebilirim?

Kullanarak GNU bash (sürüm 4.0.35(1)-release (x86_64-suse-linux-gnu), Düzenli İfadeler ile bir test inkar etmek istiyorum. Örneğin, eğer yolda zaten orada değilse, şartlı YOL değişkeni için bir yol eklemek istiyorum:

TEMP=/mnt/silo/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
export PATH

Bunu yapmak için bir milyon yolu vardır eminim, ama ben bilmek istiyorum ne olursa koşullu bir şekilde (hatalı) olarak reddedildiği olabilir

TEMP=/mnt/silo/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
export PATH

Teşekkürler!

CEVAP
28 Aralık 2010, Salı


Ayrıca parantez içinde ünlem koyabilirsiniz:

if [[ ! $PATH =~ $temp ]]

ama yanlış pozitif azaltmak için desen çapa gerekir:

temp=/mnt/silo/bin
pattern="(^|:)$temp(:|$)"
if [[ ! $PATH =~ $pattern ]]

başında bir eşleşme arar ya da önce ve sonra iki nokta (veya her ikisi) ile biten. Kabuk değişkenleri ile isim çakışması olasılığı azaltmak için bir alışkanlık gibi küçük harf veya karışık durumda değişken adlarını kullanmanızı öneririz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • sonia989

    sonia989

    26 EKİM 2006
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007