我正在尝试制作以下if语句
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
。
问题
谁能看到我做错了什么?
答案 0 :(得分: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
根本没有返回任何内容的情况下这并不完全相同。
答案 1 :(得分: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