python中的空格字符,不会被bash解释

时间:2014-03-08 23:18:16

标签: python bash shell ascii

我有一个Python脚本script.py,我用它来生成另一个脚本的命令行参数,如下所示:

./main $(./script.py)

script.py的输出可能包含由shell无意解释的空格(例如foo bar)。我希望./main的参数是单个字符串"foo bar"。当然,如果我将参数引用到./main,我可以解决这个问题,如下所示:

./main "$(./script.py)"

但我不能也不想那样做。 (原因是因为./main被调用而没有来自另一个我无法编辑的脚本的引号。)

我的Python脚本可以使用space字符的替代表示,而bash不会解释吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试让./script.py输出一个非中断空格(U + 00a0)而不是常规空格,bash不会用于分词。但是,我会提交错误报告,让调用main的脚本为其参数添加引号。这是否有效取决于main如何对获取由两个字节的UTF-8序列组成的字符串作出反应,而该字符串代表U + 00a0而不是单个空格字符。

示例script.py

#!/usr/bin/python
print u'foo\xa0bar'.encode('utf8')

示例脚本a.bash

#!/bin/bash
main () {
    echo $#
}
main $(script.py)

最后,演示mainscript.py的输出中得到1个参数:

$ bash a.bash
1

答案 1 :(得分:1)

如果无法引用调用代码,可以更改python脚本以转义输出中的空格。

请参阅以下代码段:

arg1() { echo "$1"; }
arg1 abc def
abc

arg1 abc\ def
abc def

因此,您可以看到从python代码输出abc\ def而不是abc def,它将被视为单个参数。

答案 2 :(得分:0)

假设:

  • 您可以控制./main并且它是一个shell脚本
  • Python脚本的整个输出将被解释为单个参数

只需在$*

中使用$1而不是./main