解決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'}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM