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

  • kimberly p

    kimberly p

    23 Ocak 2010
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008