簡體   English   中英

如何在Bash命令行參數中轉義空格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM