bash支持在命令行参数中逃脱空间?
我有一个简单的python脚本,使用argparse获得从bash传递的参数,但是当我称其为:
时myscript.py --name="Some Text With Spaces"
我得到的结果是:
args = ['Text', 'With' Spaces']
kwargs = {'name': 'Some'}
i虽然用" "支持空间,但尝试
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