假设我在bash
脚本中编写以下内容:
if [ -z $a ] || [ -z $b ] ; then
usage
fi
它有效,但我想用short-circuiting
编写如下:
[ -z $a ] || [ -z $b ] || usage
不幸的是它不起作用。我错过了什么?
答案 0 :(得分:12)
如果完成第一个或第二个条件,您希望执行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"
$
答案 1 :(得分:8)
您可以使用following form:
[[ expression ]]
并说:
[[ -z "$a" || -z "$b" ]] && usage
如果usage
或a
为空,则会执行b
。
始终引用您的变量。说
[ -z $a ]
如果变量a
设置为foo bar
,则会返回错误:
bash: [: foo: binary operator expected