0

我正在尝试制作以下 if 语句

if (!(zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q $day) )

所以当第一个命令没有返回任何东西并且第二个 returntrue时,它应该被执行。

如果我尝试

if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q $day; then
  echo ok
fi

那么我不能让它失败。它总是打印ok

问题

谁能看到我做错了什么?

4

2 回答 2

1

这是一种解决方法而不是答案,但您可以使用以下方法来反转测试grep本身的意义-v

if zfs list -t snapshot -o name -H | grep -qv secure && echo $days | grep -q $day; then
  echo ok
fi

zfs list -t snapshot -o name -H尽管在什么都不返回的情况下这并不完全相同。

于 2013-05-16T13:54:20.240 回答
1

我能够使其输出的唯一方法ok是 zfs 报告secure$days包含$day. 任何其他组合(即 zfs 不报告secure或 $days not containing$day`)都不会产生任何输出。

由于我没有zfs,我定义了一个函数:

function zfs () { echo secure ; } ; days=1; day=1; if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi
function zfs () { echo securX ; } ; days=1; day=1; if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi
function zfs () { echo securX ; } ; days=0; day=1; if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi
function zfs () { echo secure ; } ; days=0; day=1;if  ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q "$day" ; then echo ok; fi

function zfs () { echo secure ; } ;  days=0; day=1; if ( ! ( zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day" ) ); then echo ok; fi
function zfs () { echo securX ; } ;  days=0; day=1; if ( ! ( zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day" ) ); then echo ok; fi
function zfs () { echo securX ; } ;  days=1; day=1; if ( ! ( zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day" ) ); then echo ok; fi
function zfs () { echo secure ; } ;  days=1; day=1; if ( ! ( zfs list -t snapshot -o name -H | grep -q secure) && (echo $days | grep -q "$day" ) ); then echo ok; fi
于 2013-05-16T13:55:54.837 回答