为什么在这种情况下不 bash 短路工作



假设我正在bash脚本中编写以下内容:

if [ -z $a ] || [ -z $b ] ; then
    usage
fi

它有效,但我想用short-circuiting编写如下:

[ -z $a ] || [ -z $b ] || usage

不幸的是,它不起作用。我错过了什么?

您希望在

满足第一个或第二个条件的情况下执行usage。为此,您可以执行以下操作:

[ -z $a ] || [ -z $b ] && usage

测试:

$ [ -z "$a" ] || [ -z "$b" ] && echo "yes"
yes
$ b="a"
$ [ -z "$a" ] || [ -z "$b" ] && echo "yes"
yes
$ a="a"
$ [ -z "$a" ] || [ -z "$b" ] && echo "yes"
$ 
您可以使用

以下形式:

[[ expression ]]

并说:

[[ -z "$a" || -z "$b" ]] && usage

如果ab为空,这将执行usage


始终引用您的变量。 谚语

[ -z $a ]

如果变量 a 设置为 foo bar 将返回错误:

bash: [: foo: binary operator expected

相关内容

  • 没有找到相关文章

最新更新