【发布时间】:2014-10-05 21:24:24
【问题描述】:
我正在尝试优化我的代码,并且借用了一段特定的代码。我想删除 sed,这样我就不会在主循环中使用任何外部进程。
function sendMsg () {
value=$(echo $1 | sed 's/ /%20/g;s/!/%21/g;s/"/%22/g;s/#/%23/g;s/\&/%26/g;s/'\''/%28/g;s/(/%28/g;s/)/%29/g;s/:/%3A/g;s/\//%2F/g');
str="http://www.xxxx.com/api.ashx?v=1&k=$Key&a=send&w=$value";
curl -s $str;
}
为清楚起见,我已对此进行了编辑。 $value 只是在函数末尾通过 curl 命令转换为正确的 url 以进行输出。
虽然这工作得很好,但我最感兴趣的是尽可能快地处理它,如果可以的话,不要分叉到外部进程。
感谢到目前为止的 cmets!
我目前的情况是这样的:
function sendMsg () {
str="http://www.xxxx.com/api.ashx?v=1&k=$Key&a=send&w=";
curl -s $str --data-urlencode "$1";
}
我至少在正确的轨道上吗?
【问题讨论】:
-
是的,在 bash 中会更快。尽管 bash-the-language 很慢,但启动一个子进程、读取它的输出并等待()它退出的速度比几十个参数扩展要慢得多,。
-
...微基准测试(在循环中执行任一方法)将是回答这个问题的综合方法,你知道。
-
...也就是说,如果您的目标是实现对任意数据的正确转义以用于形成 URL,我认为正确的答案不是 sed 或参数扩展,但要使用规范实现,其他人多年来一直在棘手的极端情况下进行测试——例如 Python 的
urllib.quote()。 -
你应该考虑过
--data-urlencode。 -
@yab 你的问题已经和上一个完全不同了。我认为您应该刚刚接受修复它并创建另一个问题的当前答案。
标签: bash optimization curl sed