我有一个Python脚本script.py
,我用它来生成另一个脚本的命令行参数,如下所示:
./main $(./script.py)
script.py
的输出可能包含由shell无意解释的空格(例如foo bar
)。我希望./main
的参数是单个字符串"foo bar"
。当然,如果我将参数引用到./main
,我可以解决这个问题,如下所示:
./main "$(./script.py)"
但我不能也不想那样做。 (原因是因为./main
被调用而没有来自另一个我无法编辑的脚本的引号。)
我的Python脚本可以使用space
字符的替代表示,而bash不会解释吗?
答案 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)
最后,演示main
从script.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脚本只需在$*
$1
而不是./main