防止bash变量污染环境

Ste*_*ieD 1 bash

我有一个编译 .bashrc 文件的脚本。它测试某些命令是否可用。它生成如下变量:

command -v cheat 2>&1 >/dev/null
HAS_CHEAT=$?

command -v git 2>&1 >/dev/null
HAS_GIT=$?
Run Code Online (Sandbox Code Playgroud)

如果设置了这些变量,脚本中的其他文件将执行或不执行某些操作。

我遇到的问题是,加载 .bashrc 后,我的环境被这些变量污染了。我不想unset手动处理每个变量。想知道是否有更好的方法来做到这一点。

Gor*_*son 5

给变量一个唯一的前缀(如HAS_上面的“”),然后在最后运行:

unset "${!HAS_@}"
Run Code Online (Sandbox Code Playgroud)

这种形式的间接扩展(使用!@)给出名称以指定前缀开头的变量列表。

注意:我认为这不适用于 bash 以外的任何 shell。