Misalkan saya ingin membandingkan gcc
versi untuk melihat apakah sistem memiliki versi minimum yang diinstal atau tidak.
Untuk memeriksa gcc
versinya, saya menjalankan yang berikut ini
gcc --version | head -n1 | cut -d" " -f4
Outputnya adalah
4.8.5
Jadi, saya menulis if
pernyataan sederhana untuk memeriksa versi ini terhadap beberapa nilai lainnya
if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
echo "Less than 5.0.0"
else
echo "Greater than 5.0.0"
fi
Tapi itu melempar kesalahan:
[: integer expression expected: 4.8.5
Saya mengerti kesalahan saya bahwa saya menggunakan string untuk membandingkan dan -lt
membutuhkan integer. Jadi, apakah ada cara lain untuk membandingkan versi?
shell-script
test
version
numeric-data
Abimanyu Saharan
sumber
sumber
gcc -dumpversion
Jawaban:
Saya tidak tahu apakah itu indah, tetapi berfungsi untuk setiap format versi yang saya tahu.
( Catatan: versi yang lebih baik oleh pengguna 'wildcard': https://unix.stackexchange.com/users/135943/wildcard , menghapus ketentuan tambahan)
sumber
printf "$requiredver\n$currentver"
denganprintf '%s\n' "$requiredver" "$currentver"
.-V
adalah perpanjangan GNUsort(1)
sehingga solusi ini non-portabel.sort -n
bekerja hampir sama dengan cara dalam kasus versi angka.Di sini saya memberikan solusi untuk membandingkan versi Unix Kernel. Dan itu harus bekerja untuk orang lain seperti gcc. Saya hanya peduli untuk nomor versi 2 pertama tetapi Anda dapat menambahkan lapisan logika lain. Ini adalah satu liner dan saya menulisnya dalam beberapa baris untuk memahami.
Anda dapat memodifikasi ini dan menggunakannya untuk memeriksa versi gcc.
sumber
Kami biasa melakukan banyak pemeriksaan versi di makefile GNU. Kami keluar melalui fasilitas makefile. Kami harus mendeteksi Binutils lama dan kompiler buggy dan menyelesaikannya dengan cepat.
Pola yang kami gunakan adalah:
sumber
Versi lebih pendek:
sumber
printf '%s\n'
cukup baik;printf
akan mengulangi format string sesuai kebutuhan.printf
mengulangi format string tetapi saya sintaks (kurangnya!) Untuk ini adalah IMHO jelas; jadi saya menggunakan ini hanya bila diperlukan = ketika jumlah argumen besar atau variabel.Kredit jatuh ke @Shellman
sumber