将find命令输出另存为冒号分隔的环境变量

时间:2016-01-18 21:48:47

标签: bash

我认为这是一个微不足道的问题,我希望将输出转换为PKG_CONFIG_PATH环境变量。我无法理解为什么以下bash片段失败:

PKG_CONFIG_PATH=`find /usr/loc* /usr/X11 -name pkgconfig`
PKG_CONFIG_PATH=${PKG_CONFIG_PATH// /:}

我想这不是一个分隔不同字符串的空间。但它是什么?经过大量的搞乱后,我最终得到了:

PKG_CONFIG_PATH=`echo $(find /usr/loc* /usr/X11 -name pkgconfig ) | sed 's/ /:/g'`

哪个有效,但我觉得它很丑陋而且很笨拙。有什么改进吗?

1 个答案:

答案 0 :(得分:3)

您可以告诉GNU find直接使用冒号,然后使用任何POSIX shell中可用的参数扩展修剪它:

PKG_CONFIG_PATH=$(find /usr/loc* /usr/X11 -name pkgconfig -printf '%p:')
PKG_CONFIG_PATH=${PKG_CONFIG_PATH%:} # trim last colon

...或正确替换find输出中的换行符(请注意,这是纯POSIX shell中不可用的扩展语法):

PKG_CONFIG_PATH=$(find /usr/loc* /usr/X11 -name pkgconfig)
PKG_CONFIG_PATH=${PKG_CONFIG_PATH//$'\n'/:}