Je vérifie un compteur dans une boucle pour déterminer s'il est supérieur à un maximum, si spécifié dans un paramètre facultatif. Puisque c'est facultatif, je peux soit par défaut le maximum à une valeur spéciale ou à l'entier maximum possible. La première option nécessiterait une vérification supplémentaire à chaque itération, donc je voudrais plutôt savoir quel est l'entier maximum qui fonctionnera avec l'opération -gt
Bourne Shell.Recherche de la valeur entière positive maximale dans Bourne Shell
Répondre
je rester à l'écart des limites entières car ils sont non portables et problématiques
$ test 123412341234112341235 -gt 1 || echo bash compares ints
-bash: test: 123412341234112341235: integer expression expected
bash compares ints
$ env test 1 -gt 123412341234112341235 || echo coreutils compares strings
coreutils compares strings
Au lieu de cela, je voudrais juste faire comme vous le suggérez et faire la comparaison supplémentaire comme:
[ "$limit" ] && [ $count -gt $limit ]
Le shell Bourne ne dispose d'aucun moyen pour stocker ou manipuler des nombres - tout est stocké sous forme de chaîne. Si vous demandez à ce genre de chose:
if [ $x -gt $y ]
alors qui est gérée par un séparée (dans le shell Bourne) exécutable appelé test
, qui a un lien symbolique appelé « [ ». Donc, votre question concerne vraiment les limites de la commande test
, que tous les docs que je peux trouver semblent assez réticents.
Sur mon système, l'entier maximum de Bash semble être le même que la constante LONG_MAX de ma bibliothèque Perl POSIX. De toute évidence, cela varie sur votre plate-forme, et la façon dont votre Bash a été compilé, etc. Mais cela semble être un bon point de départ pour le tester:
declare -i max=$(perl -MPOSIX -le 'print LONG_MAX')
echo $max
9223372036854775807
echo "max+1 = " $((i += 1))
max+1 = -9223372036854775808
uname -a
Linux x200s 3.2.0-33-generiC#52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Mise à jour: Après avoir essayé cela sur un vieux 32 bits Linux, Je vois que POSIX LONG_MAX de mon Perl est 2147483647, mais que Bash a toujours la même limite. Il semble être défini dans /usr/include/limits.h, et dépend de votre __WORDSIZE, qui peut être de 64 bits, même sur des systèmes 32 bits:
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
- 1. Quelle est la valeur entière maximale dans Flex?
- 2. Passer la variable Bourne Shell dans la commande de coupure
- 3. Sortie rincage à Bourne Shell
- 4. Bourne Shell Pour je dans (seq)
- 5. Comment comparer les chaînes dans Bourne Shell?
- 6. sortie Bourne Shell ne fonctionnera pas
- 7. Requête pour la recherche Nième valeur maximale dans Mysql
- 8. MongoDB Regex Recherche sur une valeur entière
- 9. variables breaks Supprimer ligne dans Bourne Shell de
- 10. Pourquoi cette instruction if échoue-t-elle dans bourne shell?
- 11. Bourne Shell: Façon gracieuse d'obtenir le statut de sortie
- 12. valeur maximale dans récursion
- 13. Bourne une variable
- 14. trouver de la valeur entière supérieure
- 15. Recherche de la valeur maximale dans une colonne à l'aide de GQL
- 16. Obtenir la valeur précédente valeur maximale
- 17. Modification d'une valeur positive à une valeur négative
- 18. Recherche de la valeur maximale dans un dictionnaire contenant des éléments mixtes en Python
- 19. Comment vérifier l'existence d'un fichier en utilisant un caractère générique dans Bourne shell?
- 20. Valeur maximale de int dans ChucK
- 21. comment convertir la valeur de nsarray en valeur entière
- 22. Valeur de contrôle conditionnelle positive par rapport à la valeur négative
- 23. Comment récupérer la valeur entière d'une énumération?
- 24. Définir la valeur entière comme masque de bits
- 25. Scinder une chaîne par un saut de ligne et un espace dans le shell Bourne
- 26. z-index valeur maximale
- 27. Quelle est la valeur maximale de tinyint (2) dans MySQL?
- 28. Obtenir la valeur maximale de float dans SQL par programme
- 29. Exclure une chaîne de la recherche générique dans un shell
- 30. Insertion d'une valeur entière dans un TextBox