如何使用shell命令仅获取PHP的版本号?

如何使用shell命令仅获取PHP的版本号?

我只想获取 CentOS 上安装的 php 版本。

输出php -v

PHP 7.1.16 (cli) (built: Mar 28 2018 13:19:29) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

我尝试了以下操作:

php -v | grep PHP | awk '{print $2}'

但我得到的输出是:

7.1.16
(c)

我怎样才能得到7.1.16?

答案1

延伸杰夫·夏勒的回答,完全跳过管道,只要求内部常量表示:

$ php -r 'echo PHP_VERSION;'
7.1.15

您可以扩展此模式以获取更多或更少的信息:

$ php -r 'echo PHP_MAJOR_VERSION;'
7

请参阅PHP 预定义常量列表对于所有可用的。

主要好处:它不依赖于php -v.鉴于它与管道解决方案的性能大致相同,那么它似乎是一个更可靠的选择。


如果您的目标是测试对于版本,那么你也可以使用这种模式。例如,0如果 PHP >= 7,此代码将退出,1否则:

php -r 'exit((int)version_compare(PHP_VERSION, "7.0.0", "<"));'

作为参考,以下是各种测试用例的时间安排,先排序最快的:

$ time for (( i=0; i<1000; i++ )); do php -v | awk '/^PHP [0-9]/ { print $2; }' >/dev/null; done

real    0m13.368s
user    0m8.064s
sys     0m4.036s

$ time for (( i=0; i<1000; i++ )); do php -r 'echo PHP_VERSION;' >/dev/null; done

real    0m13.624s
user    0m8.408s
sys     0m3.836s

$ time for (( i=0; i<1000; i++ )); do php -v | head -1 | cut -f2 -d' ' >/dev/null; done

real    0m13.942s
user    0m8.180s
sys     0m4.160s

答案2

如果您通过包管理器(例如 RPM 或 yum)安装了 php,那么您可以从那里查询版本:

rpm -q --queryformat="%{VERSION}" php

或者,您可以要求 php直接告诉你它的版本:

php -r 'echo phpversion();'

答案3

在我的系统上:

$> php -v | grep ^PHP | cut -d' ' -f2
7.0.32-0ubuntu0.16.04.1

作为grep PHP火柴每一个它遇到的 PHP 字符串。

意思^PHP是“仅匹配位于行开头的字符串‘PHP’”。

显然,如果 的输出格式php -v在版本/构建之间保持一致,则此方法有效。

作为参考,整个输出是:

PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

答案4

自从您开始使用以来awk,这里有一个awk解决方案:

$ php -v | awk '/^PHP/{print $2}'
7.2.10

相关内容