Suponha que eu queira comparar a gcc
versão para ver se o sistema possui a versão mínima instalada ou não.
Para verificar a gcc
versão, executei o seguinte
gcc --version | head -n1 | cut -d" " -f4
A saída foi
4.8.5
Então, escrevi uma if
declaração simples para comparar esta versão com outro 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
Mas gera um erro:
[: integer expression expected: 4.8.5
Eu entendi meu erro que eu estava usando seqüências de caracteres para comparar e -lt
requer número inteiro. Então, existe alguma outra maneira de comparar as versões?
shell-script
test
version
numeric-data
Abhimanyu Saharan
fonte
fonte
gcc -dumpversion
Respostas:
Não sei se é bonito, mas está funcionando para todos os formatos de versão que conheço.
( Nota: versão melhorada pelo usuário 'curinga': https://unix.stackexchange.com/users/135943/wildcard , condição adicional removida)
fonte
printf "$requiredver\n$currentver"
porprintf '%s\n' "$requiredver" "$currentver"
.-V
é uma extensão GNU,sort(1)
portanto, esta solução não é portátil.sort -n
funciona da mesma maneira no caso de versões numéricas.Aqui, dou uma solução para comparar as versões do Unix Kernel. E deve funcionar para outros, como o gcc. Eu só ligo para o número da primeira versão 2, mas você pode adicionar outra camada de lógica. É um liner e eu escrevi em várias linhas para entender.
Você pode modificar isso e usá-lo para verificação da versão do gcc.
fonte
Costumávamos fazer muita verificação de versão em um makefile GNU. Nós percorremos as instalações de makefile. Tivemos que detectar Binutils antigos e compiladores de bugs e contorná-los em tempo real.
O padrão que usamos foi:
fonte
Versão mais curta:
fonte
printf '%s\n'
é bom o suficiente;printf
repetirá a string de formato conforme necessário.printf
repete a string de formato, mas a sintaxe (falta de!) Para isso é IMHO obscura; então eu uso isso somente quando necessário = quando o número de argumentos é grande ou variável.O crédito vai para @Shellman
fonte