Я в команде, которая разрабатывает GitKraken , поэтому я немного предвзят, но я настоятельно рекомендую вам проверить это. Он работает не только с Linux, но также с Windows и Mac, и он обладает некоторыми другими уникальными функциями, включая отмену / повтор, индексированный поиск и отзывчивый, интуитивно понятный дизайн.
Есть разные способы, мне нравится смотреть назад:
php -v | grep -Po '(?<=^PHP )[^ ]+'
или
php -v | grep -Po '(?<=PHP )([0-9.]+)'
В моей системе:
$> 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
Если вы установили php через менеджер пакетов (, например. RPM или yum ), тогда вы можете запросить версию оттуда:
rpm -q --queryformat="%{VERSION}" php
Кроме того, вы можете попросить php сообщить вам свою версию напрямую:
php -r 'echo phpversion();'
Расширение ответа Джеффа Шаллера , полностью пропустить конвейер и просто запросить внутреннее постоянное представление:
$ 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
Поскольку вы начали с awk
, вот awk
решение:
$ php -v | awk '/^PHP/{print $2}'
7.2.10
php -v | awk NR==1'{print $2}'
или
php -v | awk '{print $2; exit}'
Я думаю, что это более чистое и элегантное решение (также должно работать в Windows):
php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION.'.'.PHP_RELEASE_VERSION;"
Вывод будет похож на 7.2.24
.