有时我使用,$PROJECT_HOME/*
删除项目中的所有文件。当PROJECT_HOME
未设置环境变量时(因为我设置了su
并且新用户没有设置此环境变量),它开始从根文件夹中删除所有文件。这是世界末日。
bash
当我在 shell 中使用未定义的环境变量时,如何配置抛出错误?
答案1
答案2
[ -z "$PROJECT_HOME" ] || rm -r "$PROJECT_HOME"/*
这也将捕获以下情况:PROJECT_HOME
是设置但不包含任何内容。
例子:
1)这将删除系统上几乎所有可以删除的内容(除了里面的点文件/
(通常没有)):
set -u
PROJECT_HOME=
rm -r "$PROJECT_HOME"/*
2)这不会做任何事情:
PROJECT_HOME=
[ -z "$PROJECT_HOME" ] || rm -r "$PROJECT_HOME"/*
完全删除项目主目录并重新创建它可能是另一种选择(如果您也想摆脱点文件):
#no apocalyptic threats in this scenario
rm -r "$PROJECT_HOME"
mkdir "$_"
答案3
另一种方法可以做到这一点:
rm -r "${somevar:-/tmp/or_this_if_somevar_is_empty}"/*
有很多变量替换,上面的替换是当“somevar”为空时(在这种情况下它会尝试删除/tmp/or_this_if_somevar_is_empty/*
)