我需要将一个目录附加到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_PATH
CPATH
LIBRARY_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的建议进行编辑