【问题标题】:meaning of -a -z in if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"] bash conditional [duplicate]if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"] bash 条件 [重复] 中 -a -z 的含义
【发布时间】:2019-01-07 15:27:32
【问题描述】:

-a -z在中是什么意思

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

bash 条件?

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

定义

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

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

根据docs

-a 文件 如果文件存在则为真。

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

【问题讨论】:

  • 我怀疑作者使用 -a 来执行布尔“AND”。

标签: bash conditional


【解决方案1】:

[ -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 ]]

【讨论】:

  • 如果你没有使用[[ ]],你应该使用[ ... ] && [ ... ],参见Bash Pitfall #6
【解决方案2】:

请试试这个“人测试”。

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

【讨论】:

  • 这将为您提供外部 test/[ 命令的手册页,但在 Bash 中,它们是内置的,其帮助位于 help test(或 @987654324 @)。
【解决方案3】:

是“和”。

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多