我有一个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)
最后,main
从script.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