假设我正在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
如果a
或b
为空,这将执行usage
。
始终引用您的变量。 谚语
[ -z $a ]
如果变量 a
设置为 foo bar
将返回错误:
bash: [: foo: binary operator expected