我正在过滤PATH
变量,以便删除某些元素(在下面的示例中,它是包含字符串的元素x86
;实际上我正在寻找字符串site-packages
):
$ echo $(IFS=:;arr=($PATH);echo "${arr[*]//*x86*}")
/usr/local/bin:/usr/bin:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live::/cygdrive/c/Program Files/Lenovo Fingerprint Reader:::/cygdrive/c/Program Files/Intel/iCLS Client:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/IPT:::::/cygdrive/c/Program Files/Intel/WiFi/bin:/cygdrive/c/Program Files/Common Files/Intel/WirelessCommon:/cygdrive/c/Program Files/Common Files/Lenovo:::/cygdrive/c/SWTOOLS/ReadyApps:::::/usr/lib/lapack
这工作得很好,除了所有被清零的元素仍然在那里,但是是空的。我想最终消除这些元素,并且我不想使用 bash 以外的任何东西来做到这一点(我知道我可以使用tr
,但出于可移植性的原因,我强烈希望使用仅 bash 的解决方案)。
这是基于 tr 的解决方案:
echo $(IFS=:;arr=($PATH);echo "${arr[*]//*x86*}" | tr -s :)
更新:我正在使用数组,因为我希望在路径元素中的空格(或冒号以外的任何其他内容)面前保持稳健。