我想声明如下

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

因此,当第一个命令不返回任何内容,而第二个返回true时,应该执行它。
如果我试着
if ! zfs list -t snapshot -o name -H | grep -q secure && echo $days | grep -q $day; then
  echo ok
fi

那我就不能让它失败。它总是打印ok
问题
有人知道我做错了什么吗?

最佳答案

我唯一能让它输出ok的方法是zfs报告secure$days包含$day。任何其他组合(即zfs未报告secure或$daysnot 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

关于linux - 如果条件为负,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16589061/

10-16 10:26