温馨提示:本文翻译自stackoverflow.com,查看原文请点击:awk - BASH: use custom variable to update PATH
awk bash sed

awk - BASH:使用自定义变量更新PATH

发布于 2020-04-11 23:13:58

我想编写一个简单的bash脚本来检查命令的输出:whereis ls在这种情况下,将相关目录存储在变量中:

myvar=$(whereis ls | awk '{sub(/\/ls$/, "", $2); print $2}')
echo $myvar
$ /bin

现在使用myvar,我需要从PATH删除此目录并更新PATH以反映此更改。我如何最有效地完成此任务?

查看更多

提问者
Jay Wehrman
被浏览
70
sergio 2020-02-02 11:43

您可以使用模式替换${parameter/pattern/string}来更新PATH

PATH=${PATH/#$myvar:/:}
PATH=${PATH/%$myvar/:}
PATH=${PATH/:$myvar:/:}

例如:

$ echo $PATH
/bin:xxx:/bin:yyy:/usr/sbin:zzz:/bin

$ echo $myvar
/bin

PATH=${PATH/#$myvar:/:}   # remove $myvar at the beginning of $PATH
PATH=${PATH/%$myvar/:}    # remove $myvar at the end of $PATH
PATH=${PATH/:$myvar:/:}   # remove $myvar anywhere else in $PATH

$ echo $PATH
:xxx:yyy:/usr/sbin:zzz::

另外,您可以使用sed

$ echo $PATH
/bin:xxx:/bin:yyy:/usr/sbin:zzz:/bin
$ PATH=$(sed -E "s@(:|^)$myvar(:|$)@:@g" <<< $PATH)
$ echo $PATH
:xxx:yyy:/usr/sbin:zzz: