Mettre une variable sur 3 chiffres

Résolu
Bonjour utilisateur du forum,
Je viens vous voir car j'aimerai savoir si il était possible de forcer une variable qui comporte un chiffre/nombre d'être sur un certain nombre d'espace.
Par exemple si je fais varA=001 et qu'ensuite j'incrémente cette variable, sa valeur sera 2 alors que j'aimerais que ce soit 002.
Merci d'avance pour vos réponses!

2 réponses

Résumé de la discussion

Problème central : comment forcer une variable numérique à conserver des zéros en tête lors de l'incrémentation, par exemple passer de 001 à 002 dans les affichages. Plusieurs réponses recommandent d'utiliser le formatage à l'affichage, par exemple printf '%03d', afin d'imprimer les nombres sur trois chiffres et préserver les zéros en tête sans modifier la valeur interne. D'autres évoquent les bases numériques (octal) et les limites des entrées comme 08 ou 09, montrant que le traitement peut convertir la chaîne en base inappropriée et briser le format. En pratique, la solution dépend du contexte : si l'objectif est l'affichage, le formatage suffit; en revanche, pour des traitements numériques, il faut gérer le décalage de longueur dès l'affectation.

Bobot (l’IA à votre service)
  1. salut,

    printf '%03d\n'  1 12 113 1114
    1. a quoi servent tout les chiffres après le printf?
    2. c'est le format ! XD
      d : indique un entier
      3 : indique le décalage vers la droite souhaité
      0 : indique de compléter à gauche avec des zéros

      cf. man 3 printf
    3. Non ça j'avais compris je parle de ceux après la commande "1 12 113 1114"
    4. La commande fonctionne mais pas lorsque je la rentrer dans une variable.
      varB=printf '%03d\n' $varA
      Il s'agit sans doute d'une erreur bête car je débute le shell
    5. il me manquait le $() c'est reglé merci de ton aide!
  2. Modérateur
    Salut,

    c'est dans quel but ?
    Parce que si la finalité est juste l'affichage, alors tu gères en numérique en interne et lorsque tu veux afficher, tu formates...
    1. J'ai une série d'une centaine de fichier de la forme nomdufichier_000.txt. Le nombre à la fin du nom s'incrémente.
      Je cherche à effectuer une opération sur ces fichiers les uns après les autres dans l'ordre croissant pour cela je souhaiterais utiliser une variable pour faire par exemple "grep -n 'toto' *$mavariable.txt" cependant cette variable quand je l'incrémente il l'a simplifie. C'est à dire qu'il va faire 001 + 1 = 2 et non pas 002 du coup au prochain passage il cherchera le fichier *2.txt ce qui ne pointe plus vers un seul est unique fichier.