我只想获取 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