function 'REPLACE'
Назначение
Заменить заданные символы в строке новым символом.
Описание
Итерирует через строку, заменяя все <find-chars> на <replace-char>.
<replace-char> может быть пустым или содержать один символ.
Если пусто, все <find-chars> будут удалены из вывода.
ПРИМЕЧАНИЕ. Замена происходит только на выходе. Исходная переменная не изменяется.
Синтаксис
REPLACE(varname,find-chars[,replace-char])
[Arguments] Not available
См. также
пример
Есть некая таблица в БД.
- | БД с исходными данными
+----+-------------------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+ | id | campname | chan_context | retry | pause | timeout | ext_context | exten | var | app | DATA | concurrent | TIMESTAMP | +----+-------------------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+ | 11 | test2666 | from-dialer | 0 | 15 | 45 | from-agents | 556 | 6001 | NULL | NULL | 1 | NULL | | 16 | BAZA110 | from-dialer | 2 | 15 | 45 | from-agents | 555 | NULL | NULL | NULL | 4 | NULL | +----+-------------------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+
Получим массив данных из БД при помощи func_odbc, чтобы использовать его дальше в диалплане.
- | func_odbc.conf
[STARTCAMP] dsn=dialer readsql=SELECT campname, retry, pause, timeout, concurrent, exten, chan_context, ext_context FROM campaign WHERE var = '${ARG1}'
Собственно, само использование REPLACE - ${REPLACE(arr,\,, )}
- | диалплан
[from-start] exten => _60XX,1,set(arr=${ODBC_STARTCAMP(${EXTEN})}) same => n,set(param=${REPLACE(arr,\,, )}) same => n,system(/var/spool/asterisk/callstart.sh ${param})
Разделитель в исходной сроке - запятая, экранируем ее.
- | выхлоп диалплана
-- Executing [6001@from-internal:1] goto("SIP/166-00001ac4", "from-start,6001,1") -- Goto (from-start,6001,1) -- Executing [6001@from-start:1] Set("SIP/166-00001ac4", "arr=test2666,0,15,45,1,556,from-dialer,from-agents") in new stack -- Executing [6001@from-start:2] Set("SIP/166-00001ac4", "param=test2666 0 15 45 1 556 from-dialer from-agents") in new stack -- Executing [6001@from-start:3] System("SIP/166-00001ac4", "/var/spool/asterisk/callstart.sh test2666 0 15 45 1 556 from-dialer from-agents") in new stack
В полученной из БД строке с данными разделенными запятой, заменили запятые на пробелы и отправили как параметры bash скрипта, через побел:
- arr=test2666,0,15,45,1,556,from-dialer,from-agents
- param=test2666 0 15 45 1 556 from-dialer from-agents
- /var/spool/asterisk/callstart.sh test2666 0 15 45 1 556 from-dialer from-agents
И наконец умозрительный пример bash скрипта, просто сохраним переданные данные в файл:
#!/bin/bash campaign=$1 retry=$2 pause=$3 timeout=$4 concurrent=$5 limit="10000" dest=$6 chcon=$7 extcon=$8 if [ -n "$5" ] then concurrent=$5 else concurrent="1" fi cat <<EOF > /var/spool/asterisk/call_start_$campaign campaign=$campaign retry=$retry pause=$pause timeout=$timeout concurrent=$concurrent limit=$limit dest=$dest chcon=$chcon extcon=$extcon EOF