如果未设置,则附加到类似 PATH 的变量而不创建前导冒号

如果未设置,则附加到类似 PATH 的变量而不创建前导冒号

我需要将一个目录附加到PKG_CONFIG_PATH.通常,我会使用标准

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig

PKG_CONFIG_PATH之前没有在我的系统上设置过。因此,该变量以一个字符开头:,这告诉它首先在当前目录中查找。我不要那个。我决定以下几点,

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig

但这看起来太丑陋了。有没有更好的办法?当且仅当变量已被设置时,有条件地附加冒号的适当方法是什么?

答案1

您使用扩展运算符是正确的${:+},您只需要稍微修改它:

V=${V:+${V}:}new_V

第一个大括号扩展为$V 冒号 iffV已经设置为空 - 这正是您所需要的(也可能也是运算符存在的原因之一)。

因此,在你的情况下:

export "PKG_CONFIG_PATH=${PKG_CONFIG_PATH:+${PKG_CONFIG_PATH}:}$(pyenv prefix)/lib/pkgconfig"

答案2

最近,我设置了GNU 存储在我的机器上存储用户范围的东西,比如库,在定义,和~/.local时遇到了麻烦,无意中在那里放了一个冒号,所以破坏了东西。LD_LIBRARY_PATHCPATHLIBRARY_PATH

然后我发现你的问题,答案并不完全正确优雅的;-),我写了一个小函数来处理这个问题,请在这里找到它:https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a

## Copyright (C) 2018 Alex Thiessen <[email protected]>
## Copyright (C) 2018 https://unix.stackexchange.com/users/116858/kusalananda
## SPDX-License-Identifier: GPL-2.0-or-later
## <https://spdx.org/licenses/GPL-2.0-or-later.html>

function join() {
    if [ ${#} -eq 0 ]
    then
        echo "\`join\` appends elements separated by colons to a \`bash\` variable " >&2
        echo "usage: join <variable> <element> [element ...]" >&2
        return 1
    fi
    variable="${1}"

    shift
    export ${variable}="${!variable:+${!variable}:}$(IFS=:; echo "${*}")"
}

// 按照@Kusalananda的建议进行编辑

相关内容