У меня есть функция Bash, чтобы установить, $PATH
как это -
assign-path()
{
str=$1
# if the $PATH is empty, assign it directly.
if [ -z $PATH ]; then
PATH=$str;
# if the $PATH does not contain the substring, append it with ':'.
elif [[ $PATH != *$str* ]]; then
PATH=$PATH:$str;
fi
}
Но проблема в том, что мне нужно написать разные функции для разных переменных (например, другую функцию для $CLASSPATH
подобных assign-classpath()
и т. Д.). Я не смог найти способ передать аргумент в функцию bash, чтобы я мог получить к нему доступ по ссылке.
Было бы лучше, если бы у меня было что-то вроде -
assign( bigstr, substr )
{
if [ -z bigstr ]; then
bigstr=substr;
elif [[ bigstr != *str* ]]; then
bigstr=bigstr:substr;
fi
}
Есть идеи, как добиться чего-то похожего в bash?
assign-path /abc
не будет добавлять /abc
к PATH , если $ PATH уже содержит /abc/def
, /abcd
, и /def/abc
т.д. Особенно вы не можете добавить , /bin
если PATH уже содержит /usr/bin
.
$PATH
и свести на нет теста на ваши аргументы , как: add=/bin dir=/usr/bin ; [ -z "${dir%"$add"}" ] || dir="${dir}:${add}"
. В своем ответе я делаю это таким образом, используя столько аргументов, сколько вы хотите использовать IFS=:
.
$PATH
? и добавьте каталог, $PATH
если его там еще нет (на Super User ).