如何删除 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_d
或 dir_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
重组。
假设我的 LD_LIBRARY_PATH 现在是 dir_a:dir_b:dir_c:prj/foo/build:dir_d
或 dir_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
重组。