我在Bash中写了以下两个函数:
function prepend_path() { PATH=$1:$PATH }
function prepend_manpath() { MANPATH=$1:$MANPATH }
功能的主体实际上会更复杂。为避免代码重复,我想做类似以下的事情:
function prepend() { "$1"=$2:"$1" }
function prepend_path() { prepend PATH $1 }
function prepend_manpath() { prepend MANPATH $1 }
但是,prepend
无效Bash。我们的想法是将环境变量的名称作为参数传递给Bash。是否可能,还是有另一种解决方案?
答案 0 :(得分:1)
尝试eval:
function prepend() { eval "$1=$2:\$$1"; }
eval
将评估其参数,就好像它是一个命令。
答案 1 :(得分:1)
以下是我的shell库中的一些函数,用于完成此任务。它还负责环境变量何时为空,以便在这种情况下不添加冒号。
append_path()
{
eval $1=\${$1:+\$$1\\:}$2
}
prepend_path()
{
eval $1=$2\${$1:+\\:\$$1}
}
以下是我如何使用它
append_binpath()
{
append_path PATH "$1"
}
append_manpath()
{
append_path MANPATH "$1"
}