9

我正在尝试将路径附加到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
4

2 回答 2

1

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

if ( ! $?PERL5LIB ) then
        setenv PERL5LIB ""
else
        setenv PERL5LIB "${PERL5LIB}:"
endif
setenv PERL5LIB ${PERL5LIB}/some/other/path
于 2018-10-01T12:54:21.640 回答
0

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

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}
于 2018-01-31T15:57:27.483 回答