Bash是否支持在命令行参数中转义空格?
我有一个简单的Python脚本使用argparse来获取从Bash传递的参数,但是当我调用它时:
myscript.py --name="Some Text With Spaces"
Run Code Online (Sandbox Code Playgroud)
我得到一个结果:
args = ['Text', 'With' Spaces']
kwargs = {'name': 'Some'}
Run Code Online (Sandbox Code Playgroud)
我虽然Bash支持空格"\"但尝试
myscript.py --name="Some\ Text\ With\ Spaces"
Run Code Online (Sandbox Code Playgroud)
导致同样的事情.
我是否在滥用Bash,或者这是我在Python方面需要处理的问题?
来自bash结束,最可能的原因是你没有告诉我们你的bash代码的真相.你打的东西看起来很像BashFAQ#50.
运行
myscript.py --name="Some Text With Spaces"
Run Code Online (Sandbox Code Playgroud)
...直接从命令行工作完美,产生一个sys.argv数组['myscript.py', '--name=Some Text With Spaces'].您描述的行为与此一致:
cmd='myscript.py --name="Some Text With Spaces"'
$cmd
Run Code Online (Sandbox Code Playgroud)
...将产生一个sys.argv数组['myscript.py', '--name="Some', 'Text', 'With', 'Spaces"'].
不要那样做.使用数组(如果需要有条件地构建参数行,通常是合适的):
cmd=( myscript.py --name="Some Text With Spaces" )
"${cmd[@]}"
Run Code Online (Sandbox Code Playgroud)
......或一个函数(在所有其他情况下通常是适当的选择):
myscript() { myscript.py --name="Some Text With Spaces" "$@"; }
myscript
Run Code Online (Sandbox Code Playgroud)