9

Próbuję dodać ścieżkę do końca mojej zmiennej środowiskowej PERL5LIB, ale nie jestem pewien, czy ta zmienna zawsze istnieje. Jeśli nie istnieje, chciałbym po prostu zainicjować go na wartość, którą próbuję dołączyć.Prosty sposób dołączania do zmiennej środowiskowej, która może jeszcze nie istnieć csh

Oto przykład, który działa:

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

Chociaż to działa, to nadal wydaje się dość niezgrabne ponieważ muszę napisać w zasadzie tę samą linię dwukrotnie. Chciałbym wymyślić bardziej wydajne rozwiązanie z jedną linią (ewentualnie z wykorzystaniem rozszerzenia parametrów).

Czy istnieje sposób konsolidacji tego do jednej linii? (Lub kilka linii, które nie dotyczą wypisywanie „/ niektóre/inne/ścieżka” wielokrotnie)


Na przykład może to być zrobione w bash:

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

P.S mogę zobaczyć edytować wersje, aby zobaczyć ostatnią zmianę ukradł moją odpowiedź! –

+0

Brakujący znak zapytania był literówką. Kod w pytaniu nie działa w ogóle bez znaku zapytania, ale nie zdawałem sobie sprawy, że go opuściłem, dopóki nie napisałem własnej odpowiedzi. – tjwrona1992

Odpowiedz

0

z braku lepsza odpowiedź Wrzucę nieco poprawioną wersję tego, co miałem w pytaniu. Poniższe co najmniej eliminuje wypisanie ścieżki dwukrotnie ...

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

Chociaż jest to tylko nieznaczna poprawa, to przynajmniej coś.

EDIT:

Technicznie to może być skrócony do:

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

Nie najbardziej czytelny, ale myślę, że to tak dobre, jak mam zamiar dostać.

EDIT 2:

Prawdopodobnie bardziej czytelny? ... Naprawdę nie wiem.

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

Przyjmuję to jako odpowiedź na brak lepszego ... Jeśli masz lepszą odpowiedź, możesz ją opublikować, a zmienię zaakceptowaną odpowiedź. – tjwrona1992

+0

wiesz, że użycie nawiasów klamrowych jest niepotrzebne i zwiększa złożoność, '{' = Rozpocznij rozwijanie w linii i '}' = Zakończ rozwinięcie w linii, ponieważ nie robisz żadnego wyrażenia, nie powinieneś ich używać i marnujesz wydajność Myślę, że nie wiesz, jaka jest różnica między złożonością a wielkością komputerów. –

+0

@MartinBarker To więcej informacji na temat powielania kodu niż rzeczywista złożoność i wydajność. Po prostu nie chcę pisać "/ some/other/path" więcej niż jeden raz, ponieważ gdy robisz to dla wielu zmiennych środowiskowych, szansa posiadania literówki w jednym i niewiedzenia o niej staje się znacznie większa. – tjwrona1992