zoukankan      html  css  js  c++  java
  • 解决shell脚本参数传递含有空格的问题

    有这样一个py文件,需要传一个字典作为参数:

    import json
    import sys
    def parse_params(data):
        json_data = json.loads(data[1])
        print json_data
    
    if __name__=='__main__':
        params = sys.argv
        print params
        parse_params(params)

    命名为sp.py,运行的时候传入如下参数:

    #python sp.py '{"mode":"1","cdCmd":"cd src/test"}'
    ['sp.py', '{"mode":"1","cdCmd":"cd src/test"}']
    {u'cdCmd': u'cd src/test', u'mode': u'1'}

    ok,没问题。但是想写shell脚本通过变量的方式传入参数,这时遇到了问题。

    shell脚本如下:

    mode="1"
    cdCmd="cd src/test"
    python sp.py '{"mode":"'$mode'","cdCmd":"'$cdCmd'"}'

    运行结果如下:

    #./test.sh
    ['sp.py', '{"mode":"1","cdCmd":"cd', 'src/test"}']
    Traceback (most recent call last):
      File "sp.py", line 10, in <module>
        parse_params(params)
      File "sp.py", line 4, in parse_params
        json_data = json.loads(data[1])
      File "/usr/local/python27/lib/python2.7/json/__init__.py", line 338, in loads
        return _default_decoder.decode(s)
      File "/usr/local/python27/lib/python2.7/json/decoder.py", line 366, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "/usr/local/python27/lib/python2.7/json/decoder.py", line 382, in raw_decode
        obj, end = self.scan_once(s, idx)
    ValueError: Unterminated string starting at: line 1 column 21 (char 20)

    发现很奇怪,cdCmd变量被分割成了两个参数:"cdCmd":"cd', 'src/test"。

    上网查阅资料后发现是因为shell会把空格作为分隔符,所以成了两个变量。这个问题目前找到两个解决办法:

    1.可以通过修改环境变量IFS来实现,默认IFS是空,改成别的字符即可。

    2.加引号也可是实现带空格参数的传递,修改shell脚本如下:

    mode="1"
    cdCmd="cd src/test"
    python sp.py '{"mode":"'$mode'","cdCmd":"'"$cdCmd"'"}'

    运行结果:

    # ./test.sh 
    ['sp.py', '{"mode":"1","cdCmd":"cd src/test"}']
    {u'cdCmd': u'cd src/test', u'mode': u'1'}
  • 相关阅读:
    1004 成绩排名
    antd 时间控件
    C语言基础知识2
    OC语言基础知识
    C语言基础知识
    清华大学EMBA总裁班教授翟万宝对阅读的看法
    redis 5.0.2 源码阅读——快速列表quicklist
    封装hiredis——C++与redis对接(一)(string的SET与GET操作)
    redis 5.0.2 源码阅读——压缩列表ziplist
    redis 5.0.2 源码阅读——整数集合intset
  • 原文地址:https://www.cnblogs.com/zoro-robin/p/6612053.html
Copyright © 2011-2022 走看看