我想在一个if语句中合并多个条件,然后取反该组合。对于简单的条件组合,我有以下工作代码:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
这很好。如果要取消它,可以使用以下工作代码:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
这也按预期工作。但是,发生在我身上的是我不知道括号实际上在做什么。我只想将它们用于分组,但是它实际上是在生成子shell吗?(我怎么知道?)如果是这样,有没有办法在不产生子shell的情况下对条件进行分组?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
并且可以正常工作。我只是习惯性地用双花括号写测试。另外,为确保不是bash
,我进一步测试了if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
它,它也可以那样工作。
[ ! -e file/. ] && [ -r file ]
将删除目录。根据需要取反。当然是-d
这样。
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
但是我想要一个更通用的答案。