写过opensips脚本的同学,往往对函数的传参感到困惑。

例如:

  • ds_select_dst()可以接受整数或者值为正数的变量作为第一个参数,但是nat_uac_test()的第一个参数就只能是整数,而不能是变量
  • 为什么rl_check()可以接受格式化的字符串,而save()只能接受字符串。
  • 为什么ds_select_dst("1", "4") 作为整数也要加上双引号?
  • 为什么变量要加上双引号? ds_select_dst("$var(aa)", "4")
  • 为什么t_on_branch("1")路由的钩子要加上双引号?
  • 为什么route(go_to_something);这里又不需要加上引号?
ds_select_dst("1", "0");
$var(aa)=1;
ds_select_dst("$var(aa)", "0");
rl_check("gw_$ru", "$var(limit)"); #格式化的gw_$ru
save("location"); #单纯的字符串作为参数

从3.0开始,传参可以更加自然。

  • 整数可以直接传参,不用加双引号
do_something(1, 1);
  • 输入或者输出的$var(), 不用加双引号,加了反而会报错
do_something($var(a), $var(b));
  • 格式化字符串,需要加双引号
do_something(1, "$var(bb)_$var(b)");

参考