Estendendo a resposta de Jeff Schaller , pule completamente o pipeline e apenas peça a representação constante interna:
$ php -r 'echo PHP_VERSION;'
7.1.15
Você pode estender esse padrão para obter mais ou menos informações:
$ php -r 'echo PHP_MAJOR_VERSION;'
7
Veja a lista PHP de constantes predefinidas para todos os disponíveis.
O principal benefício: ele não depende de um formato de saída definido de php -v
. Dado que tem o mesmo desempenho de uma solução de pipeline, parece uma escolha mais robusta.
Se seu objetivo é testar a versão, você também pode usar esse padrão. Por exemplo, esse código será encerrado 0
se PHP> = 7 e, 1
caso contrário:
php -r 'exit((int)version_compare(PHP_VERSION, "7.0.0", "<"));'
Para referência, aqui estão os horários para vários casos de teste, ordenados mais rapidamente primeiro:
$ 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
... | head -1
ou pode haver maneiras melhores