-a -z 在 if [ -z "$ENV_VAR" -a -z "$ENV_VAR2" ] bash 条件中的含义


什么是

-a -z的含义

if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"]; then
...
fi

bash有条件的?

第一个 -z 检查 $ENV_VAR 是否根据

-z 字符串 如果字符串的长度为零,则为 True。

-a -z组合测试与ENV_VAR2有什么关系?

根据文档

-a 文件 如果文件存在,则为 True。

但是,ENV_VAR2可能仅包含文本,而不包含文件名。

[ -z "$ENV_VAR" -a -z "$ENV_VAR2" ]有 2 个条件使用-a开关一起进行:

意思是这样的:

  • -z "$ENV_VAR"$ENV_VAR为空
  • -a : 和
  • -z "$ENV_VAR2"$ENV_VAR2为空

顺便说一句,如果您使用的是bash则可以重构此条件以使其更简洁:

[[ -z $ENV_VAR && -z $ENV_VAR2 ]]

请尝试这个"男人测试"。

理想情况下,在该输出中,您将看到 -a 在两个表达式之间执行"AND"。

它是"and"。

man test

EXPRESSION1 -a EXPRESSION2
  both EXPRESSION1 and EXPRESSION2 are true

例子:

$ [ -z "" -a -z "" ] && echo Hello
Hello
$ [[ -z "" -a -z "" ]] && echo Hello
bash: syntax error in conditional expression
bash: syntax error near `-a'

如果与单个[一起使用,则它是test中的"和"。如果与 [[一起使用,则它是来自 bash 的文件检查。

bash 解决方案:

$ [[ -z "" && -z "" ]] && echo Hello
Hello

对于 POSIX 兼容性,[[ ... && ... ]]不可用,但 POSIX 认为-a已过时(且可选),因此请改用两个单独的[命令。

if [ -z "$ENV_VAR" ] && [ -z "$ENV_VAR2" ]; then
...
fi

最新更新