附加到 csh 中可能尚不存在的环境变量的简单方法

Simple way to append to an environment variable that may not exist yet in csh

我正在尝试将路径附加到我的 PERL5LIB 环境变量的末尾,但我不确定该变量是否会一直存在。如果它不存在,我想简单地将它初始化为我要附加的值。

这是一个有效的例子:

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

虽然这行得通,但它仍然显得很笨拙,因为我基本上必须将同一行写两次。我想做的是想出一个更高效的单行解决方案(可能使用参数扩展)。

有没有办法将其合并为一行? (或者不涉及多次写出“/some/other/path”的几行)


例如,这可以在 bash:

中完成
export PERL5LIB=${PERL5LIB:+${PERL5LIB}:}/some/other/path

由于缺少更好的答案,我将 post 对我的问题进行稍微改进的版本。以下至少消除了两次写出路径...

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

虽然只是很微小的进步,但至少有所进步。

编辑:

从技术上讲,这可以缩短为:

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

不是最可读的,但我想这已经差不多了。

编辑 2:

可能更具可读性? ...我真的不知道。

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

如果未定义环境变量,请将其设置为空字符串。这样可以避免重复。

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