如果要组合多个测试,如何否定bash中的测试?
代码是
if ! [ $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then
echo starting xvfb
mkdir -p /tmp/xvfb
Xvfb :1 -fbdir /tmp/xvfb > /tmp/xvfb_output 2>&1 &
export DISPLAY=:1
fi
它应该是源代码并且如果尚未运行则启动Xvfb。
以前,它缺少|| [ ! -v DISPLAY ]
部分来检查所述变量是否存在。
要取消测试,您可以执行! [ ... ]
或[ ! ... ]
,这两项似乎都有效。
推理是否正确,你应该使用[ ! ...]
,因为它在测试中并因此更清晰(并且效率更高)?
答案 0 :(得分:1)
我非常确定你在效率方面放弃否定并不重要。至于可读性,您可以像这样编写if
语句:
if ! (test "$(pgrep Xvfb)" -a -n "${DISPLAY:+1}"); then
这样你在一次测试中只有一次否定。
我同意你的意见
if ! [ $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then
含糊不清
if [ ! $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then
不是。