【问题标题】:Possible to urlencode a variable in a shell script?可以在 shell 脚本中对变量进行 urlencode 吗?
【发布时间】:2015-06-27 15:41:52
【问题描述】:

是否可以在 shell 脚本中对变量进行 url 编码?

#!/bin/bash 

now=$(date +"%T") 

DATA=$(wget -q -O -   "http://someurl.com/x.htm?callback=webRequest&exthrs=1&extMode=&fund=1&entitlement=0&skipcache=&extendedMask=1&partnerId=2&output=json&noform=1")

wget -q -O - "http://somewhere.com?abc=$1&responseData=$DATA"

echo "-----COMPLETE----- $now   $1 $RANDOM  
"

我想对 DATA 变量进行 url 编码,因为它的结果中有 &,它会弄乱第二个 wget 中的参数,有没有办法在不使用 PHP 进行 url 编码的情况下对 DATA 变量进行 url 编码?

【问题讨论】:

    标签: shell sh wget


    【解决方案1】:

    这是一种对shell字符串DATA进行URL编码的方法:

    DATA=$(python -c "import urllib, sys; print urllib.quote(sys.argv[1])"  "$DATA")
    

    这是另一个:

    DATA=$(perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$DATA")
    

    【讨论】:

    • 是的,完美,他们都工作(y)谢谢。我想也许shell中有一种内置的方法可以做到这一点,但没关系。在 perl/python 中,你认为哪一个在 CPU/Mem 上的花费更少?此脚本的许多实例要同时运行,所以每一点都有帮助。
    • @SvenKahn 在我的系统(Debian 稳定版)上,perl 版本更快。
    • 谢谢,感谢您的调查。
    • 我试过了,但它会转换 = 符号,这会弄乱一些接收服务器。
    【解决方案2】:

    顺便说一句,在 Python 3 中执行此操作的方法是这样的:

    DATA=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "$DATA")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2015-03-07
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多