我想编写一个简单的bash脚本来检查命令的输出:whereis ls
在这种情况下,将相关目录存储在变量中:
myvar=$(whereis ls | awk '{sub(/\/ls$/, "", $2); print $2}')
echo $myvar
$ /bin
现在使用myvar,我需要从PATH删除此目录并更新PATH以反映此更改。我如何最有效地完成此任务?
您可以使用模式替换${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: