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ş:
Nasıl bir değişkeni bash bir sayı ise ...
Nasıl bash komut düzenli ifadeler kull...
Nasıl yerel gıt benim repo değişiklikl...
Nasıl birimi düzenli ifadeler test mus...
Nasıl bir dizi belirli bir değeri vars...