Can you specify which environment variable to modify as argument to function in Bash?
I have written the following two functions in Bash:
function prepend_path() { P开发者_开发技巧ATH=$1:$PATH }
function prepend_manpath() { MANPATH=$1:$MANPATH }
The bodies of the functions are actually going to be more complicated. To avoid code duplication, I would like to do something like the following:
function prepend() { "$1"=$2:"$1" }
function prepend_path() { prepend PATH $1 }
function prepend_manpath() { prepend MANPATH $1 }
However, prepend
is not valid Bash. The idea is to pass the name of an environment variable as an argument to Bash. Is it possible, or is there another solution?
Try eval:
function prepend() { eval "$1=$2:\$$1"; }
eval
will evaluate its argument as if it is a command.
Here are some functions I have in my shell library for exactly this task. It also takes care of when the environment variable is empty so as to not add a colon in that case.
append_path()
{
eval $1=\${$1:+\$$1\\:}$2
}
prepend_path()
{
eval $1=$2\${$1:+\\:\$$1}
}
And here's how I use it
append_binpath()
{
append_path PATH "$1"
}
append_manpath()
{
append_path MANPATH "$1"
}
精彩评论