bash 类路径变量的大括号扩展

bash brace expansion for PATH-like variables

我需要像这样设置一个变量:

./configure ... PKG_CONFIG_PATH=/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/opt/imagemagick/lib/pkgconfig:/usr/local/opt/gnutls/lib/pkgconfig

使可读性明显的方法是使用Brace Expansion:

PKG_CONFIG_PATH=/usr/local/opt/{libxml2,imagemagick,gnutls}/lib/pkgconfig
PKG_CONFIG_PATH=${PKG_CONFIG_PATH// /:}

但是,这不起作用(大括号扩展不会在变量设置中发生,而且,当扩展 完成时,分隔符是 space 似乎没有办法改变它。

那么,有没有办法避免每个包显式前缀和后缀的丑陋?

假设这是一个脚本,而不是交互式使用,我只使用一个数组。

pkg_config_path=(
 /usr/local/opt/{libxml2,imagemagick,gnutls}/lib/pkgconfig
)
./configure ... PKG_CONFIG_PATH=$(IFS=:; printf %s "${pkg_config_path[*]}")

在这一点上,您可能要考虑是否费心进行大括号扩展并仅显式列出目录:

pkg_config_path=(
  /usr/local/opt/libxml2/lib/pkgconfig
  /usr/local/opt/imagemagick/lib/pkgconfig
  /usr/local/opt/gnutls/lib/pkgconfig
)