[英]How to escape spaces in Bash command line arguments
Bash是否支持在命令行參數中轉義空格?
我有一個簡單的Python腳本,使用argparse來獲取Bash傳遞的參數,但是當我這樣調用時:
myscript.py --name="Some Text With Spaces"
我得到的結果是:
args = ['Text', 'With' Spaces']
kwargs = {'name': 'Some'}
我雖然Bash用“ \\”支持空格,但是嘗試
myscript.py --name="Some\ Text\ With\ Spaces"
結果相同。
我是在濫用Bash,還是在Python方面必須解決的問題?
從bash端來看,最可能的原因是您沒有告訴我們有關bash代碼的真相。 您擊中的內容非常像BashFAQ#50 。
運行
myscript.py --name="Some Text With Spaces"
...直接從命令行運行非常完美,從而生成了['myscript.py', '--name=Some Text With Spaces']
的sys.argv
數組。 您描述的行為與此一致:
cmd='myscript.py --name="Some Text With Spaces"'
$cmd
...這將導致sys.argv
數組為['myscript.py', '--name="Some', 'Text', 'With', 'Spaces"']
。
永遠不要那樣做。 要么使用一個數組(如果需要有條件地建立一個參數行,通常是合適的):
cmd=( myscript.py --name="Some Text With Spaces" )
"${cmd[@]}"
...或功能(通常在所有其他情況下為適當的選擇):
myscript() { myscript.py --name="Some Text With Spaces" "$@"; }
myscript
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.