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
나는 이것을 다음과 같이 시도했다.
php -v | grep PHP | awk '{print $2}'
그러나 내가 얻은 결과는 다음과 같습니다.
7.1.16
(c)
7.1.16 만받을 수있는 방법은 무엇입니까?
답변
내 시스템에서 :
$> php -v | grep ^PHP | cut -d' ' -f2
7.0.32-0ubuntu0.16.04.1
모든 PHP 문자열 과 grep 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
답변
Jeff Schaller의 답변을 확장 하고 파이프 라인을 모두 건너 뛰고 내부 상수 표현을 요청하십시오.
$ 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
답변
패키지 관리자 (예 : RPM 또는 yum)를 통해 php를 설치 한 경우 여기에서 버전을 쿼리 할 수 있습니다.
rpm -q --queryformat="%{VERSION}" php
또는 php 에게 버전을 직접 알려주 도록 요청할 수 있습니다 .
php -r 'echo phpversion();'
답변
뒤에 다른 방법을 사용하고 싶습니다.
php -v | grep -Po '(?<=^PHP )[^ ]+'
또는
php -v | grep -Po '(?<=PHP )([0-9.]+)'
답변
당신이 시작하기 때문에 awk
, 여기의 awk
솔루션 :
$ php -v | awk '/^PHP/{print $2}'
7.2.10
답변
php -v | awk NR==1'{print $2}'
또는
php -v | awk '{print $2; exit}'
답변
파이프되는 단일 함수로만 수행하려면 다음과 같이 sed를 사용해보십시오.
php -v | sed -e '/^PHP/!d' -e 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/'
먼저로 시작하지 않는 행을 삭제 PHP
한 다음 형식의 첫 번째 시퀀스 인 것으로 가정하여 해당 행에서 버전을 자릅니다 x.y.z
.
또는 원본 스크립트에 더 가까운 것을 원한다면 ^
grep 패턴 앞에 PHP로 시작하는 줄만 찾으십시오.
php -v | grep ^PHP | awk '{print $2}'