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
)
我需要像这样设置一个变量:
./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
)