Supongamos que quiero comparar la gcc
versión para ver si el sistema tiene instalada la versión mínima o no.
Para verificar la gcc
versión, ejecuté lo siguiente
gcc --version | head -n1 | cut -d" " -f4
La salida fue
4.8.5
Entonces, escribí una if
declaración simple para comparar esta versión con algún otro valor
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
Pero arroja un error:
[: integer expression expected: 4.8.5
Comprendí mi error de que estaba usando cadenas para comparar y el -lt
entero requerido. Entonces, ¿hay alguna otra forma de comparar las versiones?
shell-script
test
version
numeric-data
Abhimanyu Saharan
fuente
fuente
gcc -dumpversion
Respuestas:
No sé si es hermoso, pero está funcionando para todos los formatos de versión que conozco.
( Nota: mejor versión del usuario 'comodín': https://unix.stackexchange.com/users/135943/wildcard , condición adicional eliminada)
fuente
printf "$requiredver\n$currentver"
conprintf '%s\n' "$requiredver" "$currentver"
.-V
es una extensión de GNU, por losort(1)
tanto, esta solución no es portátil.sort -n
funciona casi de la misma manera en el caso de las versiones numéricas.Aquí doy una solución para comparar las versiones de Unix Kernel. Y debería funcionar para otros, como gcc. Solo me importa el primer número de versión 2, pero puede agregar otra capa de lógica. Es un trazador de líneas y lo escribí en varias líneas para su comprensión.
Puede modificar esto y usarlo para verificar la versión de gcc.
fuente
Solíamos comprobar muchas versiones en un archivo MAKU de GNU. Destrozamos a través de las instalaciones de archivo. Tuvimos que detectar viejos Binutils y compiladores con errores y solucionarlos sobre la marcha.
El patrón que utilizamos fue:
fuente
Versión más corta:
fuente
printf '%s\n'
es lo suficientemente bueno;printf
repetirá la cadena de formato según sea necesario.printf
repite la cadena de formato, pero la sintaxis (¡falta!) Para esto es IMHO oscura; así que uso esto solo cuando es necesario = cuando el número de argumentos es grande o variable.El crédito va a @Shellman
fuente