Как правильно составить логическое выражение в астериске?

День добрый
есть такой макрос :

exten => s,n,GotoIf($[$["${ARG1}" != "exten"]|$["${ARG1}" != "out"]]?return)
exten => s,n,...................
exten => s,n,...................
exten => s,n,...................
exten => s,n(return),Return()


По идее должно быть : если arg1 НЕ exten ИЛИ arg1 НЕ OUT тогда уходить в return ...
ЕСЛИ ARG1 имеет значение EXTEN или OUT тогда продолжать выполнение макроса в обычном режиме...
Но в итоге получается так , как будто в выражении указан логический оператор И ...

т.е. на данный момент макрос всегда уходит в ретурн.
Подскажите пожалуйста как правильно составить макрос используя логику : Если ARG1 = EXTEN или ARG1 = OUT тогда

P.S. Такой макрос отработает нормально :
exten => s,n,GotoIf($["${ARG1}" != "exten"]?return)
exten => s,n,...................
exten => s,n,...................
exten => s,n,...................
exten => s,n(return),Return()
  • Вопрос задан
  • 2811 просмотров
Решения вопроса 1
Как гласит официальный манул, верно сделать так:
exten => s,n,GotoIf($[ $[ "${ARG1}" != "exten" ] | $[ "${ARG1}" != "out" ] ]?labelTrue:labelFalse)


Но, если не получается сделать так, то всегда можно сделать просто два условия:

exten => s,n,GotoIf($["${ARG1}" != "exten"]?return)
exten => s,n,GotoIf($["${ARG1}" != "out"]?return)
exten => s,n,...................
exten => s,n,...................
exten => s,n,...................
exten => s,n(return),Return()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
exten => s,n,GotoIf($["${ARG1}" != "exten" | "${ARG1}" != "out"]?return)
Ответ написан
Комментировать
@Drill
У Вас оператор "ИЛИ". Поэтому, если результатом проверки первого условия будет "ИСТИНА", то до проверки второго условия не дойдет. Хотите, чтобы проверялись оба условия, используйте оператор "И".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы