如何在Bash命令行参数中转义空格

时间:2015-05-11 18:17:52

标签: python bash

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方面需要处理的问题?

1 个答案:

答案 0 :(得分:6)

来自bash结尾,最可能的原因是你没有告诉我们你的bash代码的真相。你打击的内容看起来很像BashFAQ #50

运行

<!--SCRIPTS-->
直接从命令行

...完美地工作,产生 public static byte[] decompress(String content) throws IOException { byte[] compressed = Base64.decode(content,Base64.DEFAULT); byte[] decodedContent = Base64.decode(content, Base64.DEFAULT); byte[] bytes = null; ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(decodedContent)); try{ ZipEntry entry = null; while ((entry = zipStream.getNextEntry()) != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count; while ((count = zipStream.read(buffer)) != -1) { baos.write(buffer, 0, count); } baos.close(); zipStream.closeEntry(); bytes = baos.toByteArray(); } return bytes; }finally{ zipStream.close(); } } 数组myscript.py --name="Some Text With Spaces" 。您描述的行为与此一致:

sys.argv

...这会产生['myscript.py', '--name=Some Text With Spaces'] cmd='myscript.py --name="Some Text With Spaces"' $cmd 数组。

永远不要这样做。使用数组(如果需要有条件地构建参数行,通常是合适的):

sys.argv

...或一个函数(在所有其他情况下通常是适当的选择):

['myscript.py', '--name="Some', 'Text', 'With', 'Spaces"']