2010-10-12 1 views
2

Я написал следующие две функции в 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. Возможно ли это, или есть другое решение?

+1

дубликата http://stackoverflow.com/questions/372869/get-name-of-a-variable-as-input-and-change -The-переменный с Сущим именем. Короткий ответ - вы можете использовать 'eval'. –

ответ

1

Try Eval:

function prepend() { eval "$1=$2:\$$1"; } 

eval будет оценивать свой аргумент, как будто это команда.

+0

Вам нужны пробелы и точки с запятой: 'function prepend() {eval" $ 1 = $ 2: \ $$ 1 "; } '. Имейте в виду [последствия для безопасности 'eval'] (http://mywiki.wooledge.org/BashFAQ/048). –

1

Вот некоторые функции, которые я имею в своей библиотеке оболочки для этой задачи. Он также заботится о том, когда переменная окружения пуста, чтобы не добавлять двоеточие в этом случае.

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" 
} 
Смежные вопросы