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
grep PHP
が一致する場合every 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
パッケージマネージャー(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}'
php -v | grep ^PHP | awk '{print $1, $2}'
出力はPHP 7.1.7になります
Ubuntu 18.04LTSでテスト済み
パイプ処理されている単一の関数だけで実行する場合は、次のように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}'
これはよりクリーンでエレガントなソリューションだと思います(Windowsでも機能するはずです)。
php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION.'.'.PHP_RELEASE_VERSION;"
出力は7.2.24
のようになります。