如何删除 LD_LIBRARY_PATH 变量中的目录条目? (在bash,当条目在中间时)

how to remove a directory entry in LD_LIBRARY_PATH variable? (in bash, when the entry is in the middle)

假设我的 LD_LIBRARY_PATH 现在是 dir_a:dir_b:dir_c:prj/foo/build:dir_ddir_a:dir_b:dir_c:prj/foo1/build:dir_d。通过使用 bash 脚本,我想检查这个 LD_LIBRARY_PATH 并且如果有一个目录路径包含模式 foo*/build 我想删除这个 foo*/build 部分。我该怎么做?
如果这个 *foo*/build 是 LD_LIBRARY_PATH 的最后一部分,我知道我可以通过 export xx=${xx%:*foo*/build} 删除它,但是如果这个 *foo*/build 部分被包围我不知道该怎么做通过 :s.

应该这样做:

export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed 's/foo.*\/build//g')
LD_LIBRARY_PATH=$( tr : $'\n' <<<$LD_LIBRARY_PATH | grep -v YOURPATTERN | paste -s -d : )

其中 YOURPATTERN 将是一个简单的正则表达式,描述您要删除的组件。根据其复杂程度,您当然可以考虑 -E-F-P 选项。

tr 将路径分成几段。 grep 删除不需要的。 paste 重组。