Assurez-vous int variable est de 2 chiffres, sinon ajouter un 0 devant pour en faire 2 chiffres
Comment puis-je vérifier une variable int ($inputNo) pour voir si c'est 2 ou plusieurs chiffres décimaux de temps?
Exemple:
inputNo="5"
Devrait être changé en: 05
inputNo="102"
Ne doit être laissé seul: 102
J'ai pensé à utiliser wc
et if
états, mais wc -m
ne semble pas donner les caractères passée en wc
, comme wc
semble toujours donner +1 pour les caractères qui est donné.
Mais je ne sais pas comment ajouter un 0 devant de l'entrée de courant nombre.
OriginalL'auteur Mint | 2009-12-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le bash-builtin
printf
avec le-v
option pour écrire à une variable plutôt que de l'imprimer sur la sortie standard:Vous voulez vous assurer que c'est numérique tout d'abord, sinon la conversion échoue. Si vous voulez être en mesure de pad tout chaîne de deux caractères ou plus, vous pouvez également utiliser:
qui est essentiellement un
while
boucle qui préfixes de votre chaîne avec "0" jusqu'à ce que la longueur est supérieur ou égal à deux.Notez que cela peut être fait en
bash
en préfixant le nombre avec deux zéros de simplement trouver les deux derniers caractères de la chaîne, en vérifiant d'abord que ce n'est pas déjà au moins la taille désirée:La différence n'est probablement pas trop grande pour un nombre à deux chiffres, mais vous pouvez trouver la dernière solution est préférable si vous avez besoin de plus grandes largeurs.
Si vous utilisez un shell autres que
bash
(peu probable, selon vos balises), vous aurez besoin de trouver les équivalents, ou de revenir à l'utilisation d'un processus externe pour faire le travail, quelque chose comme:Ce n'est, fondamentalement, ce que vous vous dites dans votre question, mais notez l'utilisation de
-n
dans leecho
de commande pour empêcher la fuite de saut de ligne (ce qui est presque certainement à l'origine de votre tout-en-un message d'erreur).Mais, comme le dit, c'est une position de repli. Si vous utilisez
bash
, les propositions antérieures de la mine sont probablement le meilleur.Pas besoin de processus externe, dans le cas général:
while test "${#inputNo}" -lt 2; do inputNo="0$inputNo"; done
([[ modifié test avec ajouté, citant pour le rendre compatible avec plus de coques).Pas besoin de bash extensions (${ # ... }), soit:
case $inputNo in [0-9]) inputNo="0$inputNo";;*);;esac
.${#...} n'est pas vraiment bash-spécifique. Il fait partie de la shell POSIX spec (opengroup.org/onlinepubs/009695399/utilities/...), mais il n'est pas présent dans l'authentique Bourne shell (heirloom.sourceforge.net/sh/sh.1.html#5).
Si vous utilisez inputNo mathématiquement garder à l'esprit que, une fois la forme de la coquille pense que la seule chiffres avec un 0 sont octal. Aussi, le 2ème var dans le printf est affecté à la 1re var c'est à dire $inputNo -> inputNo. Évident, mais pour nous les débutants...
OriginalL'auteur paxdiablo
Pour une utilisation générale de rembourrage si la chaîne est numérique ou pas
Pas besoin de tuyauterie
echo
enwc
ou à l'aide d'unwhile
boucle.De Bash, vous pouvez obtenir la longueur d'une chaîne de caractères comme ceci:
${#inputNo}
.Et puisque vous pouvez faire des sous-chaînes, vous pouvez faire ceci à la place:
OriginalL'auteur Dennis Williamson
Vous pouvez utiliser http://bash-hackers.org/wiki/doku.php/commands/builtin/printf, un exemple à partir de là:
OriginalL'auteur miku