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.