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



我有一个Python脚本script.py,我用它来生成命令行参数到另一个脚本,就像这样:

./main $(./script.py)

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

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

但是我不能也不想那样做。(原因是因为./main被调用没有引号从另一个脚本,我没有控制编辑。)

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

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

script.py:

#!/usr/bin/python
print u'fooxa0bar'.encode('utf8')
示例脚本a.bash:
#!/bin/bash
main () {
    echo $#
}
main $(script.py)

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

$ bash a.bash
1

如果不能引用调用代码,可以修改python脚本以转义输出中的空格。

查看代码片段:

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

所以你可以看到,如果你从python代码输出abc def而不是abc def,它将被视为单个参数。

假设:

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

./main内使用$*而不是$1

相关内容

  • 没有找到相关文章

最新更新