linux
shell-builtin
unset
Удалить переменную или функцию из текущего окружения оболочки
Описание
Встроенная команда оболочки unset удаляет переменную или функцию из среды текущей сессии. После unset переменная перестаёт существовать — обращение к ней вернёт пустую строку.
Команда работает только в рамках текущей сессии: если переменная была объявлена через export, unset убирает её из сессии и из окружения всех последующих дочерних процессов. Уже запущенные дочерние процессы не затрагиваются.
unset не может удалить переменную, помеченную как readonly — попытка приведёт к ошибке.
Синтаксис
# Удалить переменную
unset MY_VAR
# Явно указать, что удаляем переменную (не функцию)
unset -v MY_VAR
# Удалить функцию оболочки
unset -f my_function
# Проверить результат — пустой вывод означает успех
echo $MY_VAR
# (пустая строка)
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-v |
Удалить переменную (по умолчанию). Явное указание полезно при совпадении имён переменной и функции | unset -v MY_VAR |
-f |
Удалить функцию оболочки (а не переменную) | unset -f greet_user |
Паттерны использования
Сбросить переменную и убедиться
# Объявить переменную export MY_VAR=hello echo $MY_VAR # hello # Сбросить переменную unset MY_VAR echo $MY_VAR # (пустая строка — переменная удалена)
Очистить временную переменную
# Создать временную переменную для скрипта TEMP_FILE=/tmp/mydata.txt # ... использовать ... # Убрать после использования unset TEMP_FILE # Переменная больше не видна через env env | grep TEMP_FILE # (нет вывода)
Удалить функцию оболочки
# Объявить функцию
greet() { echo "Hello $1"; }
greet World
# Hello World
# Удалить функцию
unset -f greet
greet World
# bash: greet: command not found
Экспресс-опрос: как сбросить переменную?
# Вопрос из урока 11 (Summary Session 5): # «Как сбросить переменную?» # Ответ: unset MY_VAR # Это не то же самое, что присвоить пустую строку: MY_VAR="" # переменная СУЩЕСТВУЕТ, но пустая unset MY_VAR # переменная УДАЛЕНА полностью
Советы и предупреждения
Осторожно: нельзя удалить readonly-переменную
Если переменная объявлена как
Если переменная объявлена как
readonly MY_VAR=value, попытка unset MY_VAR завершится ошибкой: bash: unset: MY_VAR: cannot unset: readonly variable. Это защита от случайного удаления критичных системных переменных. Readonly невозможно снять без перезапуска оболочки.
Совет: unset vs присвоение пустой строки
unset MY_VAR полностью удаляет переменную — после этого echo ${MY_VAR:-default} вернёт default. А MY_VAR="" оставляет переменную существующей с пустым значением — echo ${MY_VAR:-default} вернёт пустую строку. Это важно при написании bash-скриптов с условиями по наличию переменной.
Совет: unset не влияет на уже запущенные процессы
Если вы уже запустили дочерний процесс, который унаследовал переменную через
Если вы уже запустили дочерний процесс, который унаследовал переменную через
export, то unset в родительской оболочке не уберёт её из уже запущенного процесса. unset влияет только на текущую оболочку и на новые дочерние процессы, запущенные после unset.