Если вы используете скрипт с '.'чтобы установить переменные окружения, тогда любые переменные, которые вы объявляете в этом скрипте, автоматически будут глобальными и передаются в сеанс вызывающей оболочки.
Существует три подхода, позволяющих изолировать ваши переменные и сделать их непостоянными:
1.Инициализировать переменные
Если вы используете одну переменную для захвата выбора пользователя, например, DBSELECTION, независимо от того, переданы ли вы в командной строке или введены в интерактивном режиме, вы можете запустить сценарий, инициализируяпеременная в пустую строку;
DBSELECTION=""
if [ "$1ZZZ" != "ZZZ" ] ; then
DBSELECTION=$1
else
interactiveMode
fi
- где "interactiveMode" - ваш определенный процесс получения выбора пользователя.Конечно, имена ваших методов или функций могут отличаться.
2.Unset Variables
Если вы используете временные переменные для регистрации выбора пользователя - как показано выше, DBSELECTION, вы можете захотеть сбросить переменную в конце вашего скрипта;
DBSELECTION=""
if [ "$1ZZZ" != "ZZZ" ] ; then
DBSELECTION=$1
else
interactiveMode
fi
unset DBSELECTION
3.Определите локальные, а не глобальные переменные
Если вы используете временные переменные, может быть более целесообразно определять их локально (используя набор типов), а не глобально, чтобы они не сохранялись за пределами функции внутрикоторые они определили.
typeset DBSELECTION=""
if [ "$1ZZZ" != "ZZZ" ] ; then
DBSELECTION=$1
else
interactiveMode
fi
Таким образом, ksh будет обрабатывать переменную вместо вас, а не явно сбрасывать ее самостоятельно.