Я хочу объединить несколько условий в операторе if 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
Это также работает как ожидалось. Однако мне приходит в голову, что я не знаю, что на самом деле там делают скобки. Я хочу использовать их только для группировки, но на самом ли деле это порождение? (Как я могу сказать?) Если так, есть ли способ сгруппировать условия, не вызывая подоболочки?
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
но я хотел бы получить более общий ответ.