我只想获取 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 -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)
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)
有不同的方法,我喜欢用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)
自从您开始使用awk,这是一个awk解决方案:
$ php -v | awk '/^PHP/{print $2}'
7.2.10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |