Почему состояние SSI!= ||!= не работает?

Я не могу работать с этим условным выражением

<!--#if expr="$DOCUMENT_NAME!=index.html || $DOCUMENT_NAME!=links.html" -->

пока этот без ! до = работает отлично

<!--#if expr="$DOCUMENT_NAME=index.html || $DOCUMENT_NAME=links.html" -->

В чем проблема? Я не получаю ошибки просто != не работает, хотя || с другим условием, но работает для одного условия.

1 ответ

Решение

Это потому что = а также != вряд ли один и тот же оператор. Обратите внимание, что по закону Де Моргана (который я также объяснил в этом старом посте),

a != b || c != d

эквивалентно

a = b && c = d

что никогда не верно для x = a && x = b где a != b,

Изменение бинарного оператора также требует изменения условий, чтобы быть эквивалентными.

Таким образом, по приведенной выше логике,

$DOCUMENT_NAME!=index.html || $DOCUMENT_NAME!=links.html

эквивалентно

$DOCUMENT_NAME=index.html && $DOCUMENT_NAME=links.html

который не может быть истинным, так как $DOCUMENT_NAME может быть "index.html" или "links.html", но не обоими.

Тем не менее, второй фрагмент,

$DOCUMENT_NAME=index.html || $DOCUMENT_NAME=links.html

"работает", потому что нет вышеупомянутой логической ошибки. Это будет верно, если $DOCUMENT_NAME имеет значение "index.html" или "links.html".


Некоторые языки / значения будут нарушать вышеуказанную эквивалентность... но это другая тема.

Другие вопросы по тегам