unset命令可删除当前Shell会话中的变量,语法为unset变量名(不可加$),支持多变量空格分隔;只读变量无法删除,变量与函数同名时默认先删变量,可用-f或-v选项明确指定删除目标。

直接用 unset 命令即可删除当前 Shell 会话中不再需要的变量。它不涉及内存释放或系统级清理,只是让变量名从当前 shell 的作用域中消失。
基本删除方法
语法很简单:unset 变量名。变量名后面**不能加 $**,否则会报错或误删其他内容。
-
name="Alice"→ 正确删除:unset name -
unset $name是错的:它实际执行的是unset Alice,试图删一个叫Alice的变量,而非name - 删除后再次
echo $name输出为空,declare -p name会提示 “not found”
一次删多个变量
用空格分隔多个变量名,无需重复写 unset:
unset tmp_dir log_level debug_flag- 即使其中某个变量不存在,其余仍会正常删除(不会中断)
注意只读变量和函数名冲突
有些变量被设为只读(如通过 readonly PATH),unset 无法删除,会报错并返回非零状态。
如果变量名和函数名相同(比如同时定义了 foo=1 和 function foo(){...}):
-
unset foo默认先删变量,再删函数(若变量不存在) - 想明确只删函数,加
-f:unset -f foo - 想明确只删变量,加
-v:unset -v foo
环境变量也一样处理
用 export 导出的环境变量,本质仍是 shell 变量,删除方式完全一致:
export MY_APP_HOME="/opt/myapp"-
unset MY_APP_HOME→ 立即从当前 shell 的环境里移除 - 该操作不影响父进程或其他终端,也不影响配置文件里的原始定义











