代码之家  ›  专栏  ›  技术社区  ›  sds Niraj Rajbhandari

类路径变量的bash-brace扩展

  •  1
  • sds Niraj Rajbhandari  · 技术社区  · 6 年前

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

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

    但是,这不起作用(在变量设置中不进行大括号扩展,而且在 完成,分隔符是 空间 似乎没有办法改变这一点。

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   chepner    6 年前

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

    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
    )