在 bash 中有效解析任何输入的最安全、最干净的方法是映射到数组中,
mapfile -t -d, <<<"$(python your_script.py)"
现在您只需要确保脚本输出您想要使用所选分隔符“,”在我的示例中读取的数据(-d
选择一个分隔符,-t
像换行符一样修剪输入)。引号是非可选的,以确保 shell 不会用空格分隔内容。
如果你有一个不包含逗号的元组,这就足够了:
print(str(your_tuple).strip('()'))
在我更熟悉 Bash 之前,下面是一些方便输入的简单方法:
我最喜欢的方法是直接阅读列表:
x=($(python3 -c "print('a','b','c')"))
echo ${x[1]}
b
echo ${x[*]}
a b c
因此,如果 my_python_function 返回一个元组,我将使用 format 来确保我只得到空格分隔的结果:
#Assuming a tuple of length 3 is returned
#Remember to quote in case of a space in a single parameter!
print('"{}" "{}" "{}"'.format(*my_python_function())
如果您希望这是通用的,您需要构造格式字符串:
res = my_python_function()
print(("{} "*len(res)).format(*res))
是一种方式。无需担心多余的空格,但您可以在格式字符串上使用 [:-1] 来删除它。
最后,如果您期望多字参数(即单个参数中的空格),您需要添加引号和一定程度的间接性(我假设您只会运行自己的“安全”脚本):
#myfile.py
res = my_python_function()
print(('"{}" '*len(res)).format(*res))
#my file.bash
eval x=($(python3 myfile.py))