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方面需要处理的问题?
答案 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"']