9

PERL5LIB ortam değişkenimin sonuna bir yol eklemeye çalışıyorum ancak bu değişkenin her zaman var olacağından emin değilim. Eğer mevcut değilse, bunu eklemeyi denediğim değere basitçe sıfırlamak istiyorum.Henüz varolmayan bir ortam değişkenine eklemek için basit bir yol csh

if ($?PERL5LIB) then 
    setenv PERL5LIB ${PERL5LIB}:/some/other/path 
else 
    setenv PERL5LIB /some/other/path 
endif 

bu işleri temelde iki kez aynı satır yazmak zorunda çünkü hala oldukça aksak gibi görünse de: İşte

çalışan bir örnektir. Yapmak istediğim, daha verimli bir hat çözümüyle (muhtemelen parametre genişletmeyi kullanarak) ortaya çıkıyor.

Bunu bir satıra birleştirmenin bir yolu var mı? (Ya da "/ bir/diğer/yol" birden çok kez dışarı yazma içermeyen bir çift çizgiler)


Örneğin bu bash yapılabilir: Bir olmaması için

export PERL5LIB=${PERL5LIB:+${PERL5LIB}:}/some/other/path 
+0

P.S Son düzenlemeyi görmek için düzeltmeleri düzenleyebilirim. –

+0

Eksik soru işareti bir yazım hatasıydı. Sorudaki kod soru işareti olmadan hiç işe yaramıyor, ama kendi cevabımı yazmaya gitmeden önce onu dışarıda bıraktığımı fark etmemiştim. – tjwrona1992

cevap

0

daha iyi cevap Soruda sahip olduğum şeyin biraz geliştirilmiş bir sürümünü yayınlayacağım. sadece çok hafif bir iyileşme olsa da en azından en azından o şey,

set perl5lib = "/some/other/path" 
if ($?PERL5LIB) then 
    setenv PERL5LIB ${PERL5LIB}:${perl5lib} 
else 
    setenv PERL5LIB ${perl5lib} 
endif 

... iki kere yolunu dışarı yazma ortadan kaldırır aşağıdakilerin.

DÜZENLEME:

Teknik olarak bu kısaltılmış olabilir:

set perl5lib = "/some/other/path" 
[ $?PERL5LIB ] && setenv PERL5LIB ${PERL5LIB}:${perl5lib} || setenv PERL5LIB ${perl5lib} 

en okunabilir değil, ama ben alacağım gibi bu konuda iyi sanırım.

DÜZENLEME 2: Muhtemelen

daha okunabilir? ... gerçekten bilmiyorum.

set perl5lib = "/some/other/path" 
[ $?PERL5LIB ] \ 
    && setenv PERL5LIB ${PERL5LIB}:${perl5lib} \ 
    || setenv PERL5LIB ${perl5lib} 
+0

Bunu daha iyi bir sorunun cevabı olarak kabul ediyorum ... Daha iyi bir cevabınız varsa, lütfen yayınlamaktan çekinmeyin ve kabul edilen cevabı değiştireceğim. – tjwrona1992

+0

kili parantez kullanımının gereksiz olduğunu ve karmaşıklık eklediğini biliyorsunuz, '{' = Satır içi genişletmeyi başlatın ve '}' = Satır içi genişletmeyi sonlandırın Bilgisayarlarda karmaşıklık ve boyut arasındaki farkı bilmediğinizi düşünüyorum. –

+0

@MartinBarker Bu, gerçek karmaşıklık ve performanstan çok kod çoğaltma hakkındadır. Sadece bir kereden fazla "/ some/other/path" yazmak istemiyorum, çünkü bunu birçok ortam değişkenine yaptığınızda bir yazım hatası yapma ve bunu bilmeme şansı çok daha fazla oluyor. – tjwrona1992

İlgili konular