Chcę uzyskać tylko wersję php zainstalowaną na CentOS.
Wyjście z 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
Próbowałem tego:
php -v | grep PHP | awk '{print $2}'
Ale otrzymałem wynik:
7.1.16
(c)
Jak mogę uzyskać tylko 7.1.16?
... | head -1
lub mogą istnieć lepsze sposobyOdpowiedzi:
W moim systemie:
ponieważ
grep PHP
pasuje do każdego napotkanego ciągu PHP.Te
^PHP
środki „pasuje tylko ciąg«PHP», kiedy to na początku wiersza”.Oczywiście działa to, jeśli format wyjściowy
php -v
jest spójny we wszystkich wersjach / kompilacjach.Dla porównania, cała produkcja to:
źródło
Rozszerzając odpowiedź Jeffa Schallera , całkowicie pomiń rurociąg i poproś o wewnętrzną stałą reprezentację:
Możesz rozszerzyć ten wzorzec, aby uzyskać więcej lub mniej informacji:
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, a1
poza tym:Dla porównania, tutaj są czasy dla różnych przypadków testowych, najpierw uporządkowane najszybciej:
źródło
php -v
Jeśli zainstalowałeś php za pomocą menedżera pakietów (np. RPM lub yum), możesz stamtąd wysłać zapytanie do wersji:
Alternatywnie możesz poprosić php o podanie jego wersji bezpośrednio :
źródło
Są różne sposoby, lubię patrzeć za siebie:
lub
źródło
.
normalne znaczenie byłoby bezużyteczne w klasie znaków, więc domyślnie jest już traktowane jako dosłowneOdkąd zacząłeś
awk
, otoawk
rozwiązanie:źródło
Lub
źródło
awk '{print $2; exit}'
Jeśli chcesz to zrobić za pomocą tylko jednej funkcji, możesz spróbować użyć sed w następujący sposób:
Najpierw usuwa każdą linię, która się nie zaczyna
PHP
, a następnie wycina wersję z tej linii, zakładając, że jest to pierwsza sekwencja w postacix.y.z
.Lub, jeśli chcesz mieć coś bliższego oryginalnemu skryptowi, po prostu umieść
^
przed wzorem grep, aby szukać tylko linii rozpoczynających się od PHP:źródło
Myślę, że jest to bardziej czyste i eleganckie rozwiązanie (powinno również działać w systemie Windows):
Wyjście byłoby jak
7.2.24
.źródło
.PHP_MINOR_VERSION