9

Tôi đang cố nối thêm đường dẫn đến cuối biến môi trường PERL5LIB của mình, nhưng tôi không chắc rằng biến này sẽ luôn tồn tại. Nếu nó không tồn tại tôi muốn chỉ đơn giản là khởi tạo nó vào giá trị mà tôi đang cố gắng để nối thêm.Cách đơn giản để nối thêm vào biến môi trường có thể chưa tồn tại trong csh

Dưới đây là một ví dụ mà hoạt động:

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

Trong khi làm việc này, nó vẫn có vẻ khá phiền phức vì tôi phải về cơ bản viết cùng một dòng hai lần. Những gì tôi muốn làm là đưa ra một giải pháp một dòng hiệu quả hơn (có thể sử dụng mở rộng tham số).

Có cách nào hợp nhất thành một dòng không? (Hoặc một vài dòng mà không liên quan đến viết ra "/ một số/khác/path" nhiều lần)


Ví dụ này có thể được thực hiện trong bash:

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

P.S tôi có thể xem sửa đổi chỉnh sửa để xem chỉnh sửa cuối cùng của bạn đã đánh cắp câu trả lời của tôi! –

+0

Dấu chấm hỏi còn thiếu là lỗi đánh máy. Mã trong câu hỏi không hoạt động chút nào mà không có dấu chấm hỏi, nhưng tôi không nhận ra tôi đã bỏ nó ra cho đến khi tôi viết câu trả lời của riêng mình. – tjwrona1992

Trả lời

0

Đối với thiếu một câu trả lời tốt hơn, tôi sẽ đăng một phiên bản cải tiến một chút về những gì tôi có trong câu hỏi. Sau đây ít nhất loại bỏ viết ra đường dẫn hai lần ...

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

Mặc dù nó chỉ là một cải tiến rất nhỏ, ít nhất nó là một cái gì đó.

EDIT:

Về mặt kỹ thuật này có thể được rút ngắn xuống còn:

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

Không phải là có thể đọc được hầu hết, nhưng tôi đoán đó là khoảng tốt như tôi sẽ nhận được.

EDIT 2:

Có thể dễ đọc hơn? ... Tôi thực sự không biết.

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

Tôi chấp nhận điều này là câu trả lời vì thiếu một câu trả lời hay hơn ... Nếu bạn có câu trả lời hay hơn, vui lòng đăng câu trả lời và tôi sẽ thay đổi câu trả lời được chấp nhận. – tjwrona1992

+0

bạn biết việc sử dụng dấu ngoặc nhọn là không cần thiết và thêm độ phức tạp, '{' = Bắt đầu mở rộng dòng và '}' = Kết thúc mở rộng nội tuyến vì bạn không làm bất kỳ biểu thức nào bạn không nên sử dụng chúng và đang lãng phí hiệu suất Tôi nghĩ bạn không biết sự khác biệt giữa độ phức tạp và kích thước trong máy tính. –

+0

@MartinBarker Điều này là nhiều hơn về sao chép mã so với độ phức tạp và hiệu suất thực tế. Tôi chỉ không muốn viết "/ some/other/path" nhiều lần bởi vì khi bạn làm điều đó cho nhiều biến môi trường, cơ hội có lỗi đánh máy trong một và không biết về nó trở nên lớn hơn nhiều. – tjwrona1992

Các vấn đề liên quan