你能指定要修改哪个环境变量作为参数在Bash中运行吗?

时间:2010-10-12 17:32:01

标签: bash

我在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。是否可能,还是有另一种解决方案?

2 个答案:

答案 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"
}