Rozszerzając odpowiedź Jeffa Schallera , całkowicie pomiń rurociąg i poproś o wewnętrzną stałą reprezentację:
$ php -r 'echo PHP_VERSION;'
7.1.15
Możesz rozszerzyć ten wzorzec, aby uzyskać więcej lub mniej informacji:
$ php -r 'echo PHP_MAJOR_VERSION;'
7
Zobacz listę predefiniowanych stałych PHP dla wszystkich dostępnych.
Główna zaleta: nie opiera się na zdefiniowanym formacie wyjściowym php -v
. Biorąc pod uwagę, że jego wydajność jest taka sama jak w przypadku rozwiązania rurociągowego, wydaje się, że jest to bardziej solidny wybór.
Jeśli Twoim celem jest przetestowanie wersji, możesz również użyć tego wzorca. Na przykład ten kod zakończy działanie, 0
jeśli PHP> = 7, a 1
poza tym:
php -r 'exit((int)version_compare(PHP_VERSION, "7.0.0", "<"));'
Dla porównania, tutaj są czasy dla różnych przypadków testowych, najpierw uporządkowane najszybciej:
$ 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
lub mogą istnieć lepsze sposoby