Quero obter apenas a versão do php instalada no CentOS.
Saída de 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
Eu tentei o seguinte:
php -v | grep PHP | awk '{print $2}'
Mas a saída que obtive foi:
7.1.16
(c)
Como posso obter apenas 7.1.16?
... | head -1
ou pode haver maneiras melhoresRespostas:
No meu sistema:
como
grep PHP
corresponde a cada seqüência de PHP que encontra.O
^PHP
meio "corresponde apenas à string 'PHP' quando está no início de uma linha".Obviamente, isso funciona se o formato de saída
php -v
for consistente entre versões / compilações.Para referência, toda a saída foi:
fonte
Estendendo a resposta de Jeff Schaller , pule completamente o pipeline e apenas peça a representação constante interna:
Você pode estender esse padrão para obter mais ou menos informações:
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:Para referência, aqui estão os horários para vários casos de teste, ordenados mais rapidamente primeiro:
fonte
php -v
Se você instalou o php através do gerenciador de pacotes (por exemplo, RPM ou yum), pode consultar a versão a partir daí:
Como alternativa, você pode pedir ao php para informar sua versão diretamente :
fonte
Existem diferentes maneiras, eu gosto de usar o look behind:
ou
fonte
.
o significado normal de seria inútil dentro de uma classe de caracteres, por isso já é tratado como literal por padrãoDesde que você começou
awk
, aqui está umaawk
solução:fonte
Ou
fonte
awk '{print $2; exit}'
Se você quiser fazer isso com apenas uma única função sendo canalizada, tente usar o sed assim:
Primeiro, ele exclui qualquer linha que não comece
PHP
, depois corta a versão dessa linha, assumindo que é a primeira sequência na forma dex.y.z
.Ou, se você quiser algo mais próximo do seu script original, basta colocar
^
na frente do seu padrão grep para procurar apenas as linhas que começam com o PHP:fonte
Eu acho que esta é uma solução mais limpa e elegante (também deve funcionar no Windows):
A saída seria como
7.2.24
.fonte
.PHP_MINOR_VERSION