【发布时间】:2015-11-08 10:15:50
【问题描述】:
如果我有一个 Python 脚本,它只打印给定的第一个参数
#!/usr/bin/env python
import sys
try:
print sys.argv[1]
except IndexError:
print "No args"
我可以运行它找到并获得预期的输出。现在,如果我编写一个简单地运行 python 脚本并回显其输出的 Bash 脚本。
#!/bin/bash
test="Test"
echo `python test.py`
然后 bash 脚本将成功回显“No args”。但是,如果我将第 3 行更改为
echo `python test.py $test`
然后我将简单地得到一个空字符串作为 Bash 脚本的输出,我不知道为什么。当我将它更改为时,我什至得到空字符串
echo `python test.py "test"`
【问题讨论】:
-
无法复制。使用最后两个命令打印参数。
-
这个最奇怪了,echo $(python test.py $test)呢
-
无法重现,当你运行你的脚本时,使用
bash -x scriptname来获得扩展的踪迹。尽量不要使用反引号,$( )更安全,更易读。 -
在部署这样的脚本之前,请使用
test='*'对其进行测试并确定这是否是所需的行为 -
到目前为止,我们知道它会发生在某些系统上,而不会发生在其他系统上,因此您的操作系统、Bash 版本和 Python 版本可能会很有趣。我也无法重现它(Debian 7.8 with Linux 3.2.0-4-amd64、Bash 4.2.37、Python 2.7.3)。