У мене є функція 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
}
Будь-яка ідея, як домогтися чогось подібного вище в баші?
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 ).