Index: pbx/pbx_realtime.c =================================================================== --- pbx/pbx_realtime.c (revision 118298) +++ pbx/pbx_realtime.c (working copy) @@ -174,6 +174,8 @@ char *tmp=""; char *app = NULL; struct ast_variable *v; + int expr = 0; + int expr_start = 0; for (v = var; v ; v = v->next) { if (!strcasecmp(v->name, "app")) @@ -186,12 +188,22 @@ if (*v->value == ',') { *ptr++ = '\\'; *ptr++ = ','; - } else if (*v->value == '|') { + } else if (*v->value == '|' && !expr) { *ptr++ = ','; + } else if (*v->value == '$') { + *ptr++ = *v->value; } else { *ptr++ = *v->value; } + if (expr_start && *v->value == '[') { + expr++; + } + if (expr && *v->value == ']') { + expr--; + } + expr_start = (*v->value == '$') ? 1 : 0; } + *ptr++ = '\0'; } else { tmp = ast_strdupa(v->value); }