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

sco*_*tbb 15 bash variable-substitution

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

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig
Run Code Online (Sandbox Code Playgroud)

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

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig
Run Code Online (Sandbox Code Playgroud)

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

pet*_*rph 17

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

V=${V:+${V}:}new_V
Run Code Online (Sandbox Code Playgroud)

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

因此,在您的情况下:

export "PKG_CONFIG_PATH=${PKG_CONFIG_PATH:+${PKG_CONFIG_PATH}:}$(pyenv prefix)/lib/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用这种形式,但我决定不这样做,因为它感觉(稍微)可读性较差:`${V}${V:+:}W` vs.`${V:+${V}:}W` 。不管怎样,他们俩都觉得很丑。我希望有一些……更优雅的东西,我猜? (2认同)