1

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

./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// /:}

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

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

4

1 回答 1

4

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

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
)
于 2018-07-20T20:19:34.380 回答