我必须根据机器上安装的Python版本安装不同的模块。
previous question询问如何执行此操作,但只有将结果打印到屏幕上。例如:
$ python -c 'import sys; print sys.version_info'
sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0)
或者更确切地说:
$ python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))'
2.7.3
在Bash shell上,如何“捕获”上面的打印行,以便我可以将其值合并到 if-statement 中?
编辑:好的,现在我意识到这很简单。我最初陷入困境:a=$(python --version)
...因为它没有为变量a
指定任何内容,所以它只将版本打印到屏幕上。
答案 0 :(得分:3)
您可以将值分配给变量:
pyver=$(python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))')
请注意=
周围没有空格。
现在,您可以在if
声明中使用它:
if [[ "$pyver" == "2.7.0" ]]; then
echo "Python 2.7.0 detected"
fi
答案 1 :(得分:1)
这样的事情:
if [[ $(python --version 2>&1) == *2\.7\.3 ]]; then
echo "Running python 2.7.3";
# do something here
fi
请注意python --version
输出到STDERR
,因此您需要将其重定向到STDOUT
。
为了将其分配给变量,
a=$(python --version 2>&1)
答案 2 :(得分:1)
使用命令替换(``或$()):
if [ $(python ...) == 2.7.3 ]
then
...
fi