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

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • failblog

    failblog

    17 HAZİRAN 2008
  • Liberator

    Liberator

    14 EYLÜL 2007