-a -z在if [-z“ $ ENV_VAR” -a -z“ $ ENV_VAR2”] bash有条件

时间:2019-01-07 15:27:33

标签: bash conditional

-a -z的含义是什么
if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"]; then
...
fi

有条件的打击?

第一个-z检查是否根据

定义了 $ ENV_VAR
  

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

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

根据docs

  

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

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

4 个答案:

答案 0 :(得分:2)

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

这是什么意思

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

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

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

答案 1 :(得分:1)

请尝试此“人工测试”。

理想情况下,在该输出中,您将看到-a在两个表达式之间执行“与”运算。

答案 2 :(得分:1)

是“和”。

请参见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

答案 3 :(得分:1)

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

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