PATH
特定の要素が削除されるように、変数をフィルタリングしています (以下の例では、 string を含む要素x86
です。実際には string を探しています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 :)
更新: パス要素内のスペース (またはコロン以外のもの) に直面しても堅牢になりたいため、配列を使用しています。