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

The*_*One 17 version 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
Run Code Online (Sandbox Code Playgroud)

我尝试了以下操作:

php -v | grep PHP | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

但我得到的输出是:

7.1.16
(c)
Run Code Online (Sandbox Code Playgroud)

我怎样才能只得到 7.1.16?

bis*_*hop 146

扩展Jeff Schaller 的回答,完全跳过管道,只要求内部常量表示:

$ php -r 'echo PHP_VERSION;'
7.1.15
Run Code Online (Sandbox Code Playgroud)

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

$ php -r 'echo PHP_MAJOR_VERSION;'
7
Run Code Online (Sandbox Code Playgroud)

查看所有可用的预定义常量的PHP 列表。

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


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

php -r 'exit((int)version_compare(PHP_VERSION, "7.0.0", "<"));'
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 这真的是唯一正确的答案。不能保证不同版本的 PHP 将具有相同的 `php -v` 输出格式 (27认同)

Jef*_*ler 21

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

rpm -q --queryformat="%{VERSION}" php
Run Code Online (Sandbox Code Playgroud)

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

php -r 'echo phpversion();'
Run Code Online (Sandbox Code Playgroud)


Mr *_*unz 14

在我的系统上:

$> php -v | grep ^PHP | cut -d' ' -f2
7.0.32-0ubuntu0.16.04.1
Run Code Online (Sandbox Code Playgroud)

asgrep 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
Run Code Online (Sandbox Code Playgroud)


Rav*_*ina 6

有不同的方法,我喜欢用look behind:

php -v | grep -Po '(?<=^PHP )[^ ]+'
Run Code Online (Sandbox Code Playgroud)

或者

php -v | grep -Po '(?<=PHP )([0-9.]+)'
Run Code Online (Sandbox Code Playgroud)


ter*_*don 5

自从您开始使用awk,这是一个awk解决方案:

$ php -v | awk '/^PHP/{print $2}'
7.2.10
Run Code Online (Sandbox Code Playgroud)