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

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006