Bash:文字列(バージョン番号)を整数に変換する

Bash:文字列(バージョン番号)を整数に変換する

glibcのバージョンを入手し、ifステートメントで使用してglibcが2.15未満であることを確認したいと思います。

しかし、問題はldd --versionを使用すると文字列として出力されることです。比較のために整数に変換する必要があります。

私はこれをした。

if [ "$(ldd --version | sed -n '1 p' | tr -cd '[:digit:]' | tail -c 3)" -lt 215 ]; then

小数点を削除する必要があり、実際のバージョン番号比較を提供できないため、これは実際には悪いことです。もう1つの問題は、いくつかのglibcバージョンに複数の小数点があることです(ここを参照)。https://en.wikipedia.org/wiki/GNU_C_Library#Version_history)これは、既存の比較が混乱することを意味します。

したがって、これを行うには、glibcのバージョン全体を整数に変換し、複数の小数点がある場合でもバージョン番号を正確に比較できる必要があります。

どんなアイデアがありますか?ありがとう

ベストアンサー1

ldd --version | sed 's/.* //;q' | awk -F. '{ if ($1 > 2 || ($1 == 2 && $2 >= 15)) { exit 0 } else {exit 1} }'

説明する:

このsedコマンドは出力の最初の行を取得し、ldd --version最後のスペースの前の内容をすべて削除して終了します(したがって数字のみを印刷します)。

フィールド区切り記号で設定されたフラグ-Fawk.

最初の数字(ドットの前)が2より大きい場合または最初の数字が2で2番目の数字が15以上の場合、終了ステータスはawk「true」になります。それ以外の場合は偽です。

次のスクリプトで使用できますbash

if ldd --version | sed 's/.* //;q' | awk -F. '{ if ($1 > 2 || ($1 == 2 && $2 >= 15)) { exit 0 } else {exit 1} }' ; then
  echo "Version is 2.15 or later"
else
  echo "Version is too old."
fi

おすすめ記事