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

meaning of -a -z in if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"] bash conditional

中的-a -z是什么意思
if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"]; then
...
fi

bash有条件?

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

定义

-z string True if the length of string is zero.

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

根据docs

-a file True if file exists.

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

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

意思是这样的:

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

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

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

请试试这个"man test"。

理想情况下,在该输出中,您会看到 -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 中的 "and"。如果与 [[ 一起使用,它是来自 bash.

的文件检查

bash解决方案:

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

为了 POSIX 兼容性,[[ ... && ... ]] 不可用,但 -a 被 POSIX 认为已过时(且可选),因此使用两个单独的 [ 命令代替。

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