J'ai ceci:
date +"%H hours and %M minutes"
J'utilise le festival pour le dire .. mais cela dit comme: "zéro neuf heures" .. Je veux qu'il dise "neuf heures"!
mais la date donnez-moi toujours 09 ... Alors je me demande si Bash peut facilement faire cela devenir seulement 9?
dans le script complexe, j'ai essayé comme
printf %d 09
mais ça échoue .. pas octal :(
une idée?
Dans votre cas, vous pouvez simplement désactiver zéro remplissage en appends -
après %
Dans la chaîne de format de date: %-H
Par défaut, les champs numériques de la date de la date avec des zéros. Les drapeaux optionnels suivants peuvent suivre "%":
-
(un trait d'union) Ne pas rembourrer le champ_
(souligné) coussinet avec des espaces0
(zéro) tampon avec zéros^
utiliser majuscule si possible#
utiliser le cas opposé si possible
Voir Manuel de date
Si vous souhaitez interpréter le numéro dans une base différente, à bash
- Les constantes ayant un 0 de premier plan sont interprétées comme des nombres octals.
- Un 0x de premier plan ou 0x dénote hexadécimal.
- Sinon, les numéros prennent la forme [BASE #] N, où la base est un nombre décimal entre 2 et 64 représentant la base arithmétique et n est un nombre dans cette base
Donc, pour interpréter un nombre comme décimal, utilisez 10#n
forme, par exemple. 10#09
echo $((10#09*2))
18
Voir Évaluation arithmétique Section du manuel Bash.
Si vous essayez de faire des comparaisons en décimale avec les valeurs de date, j'ai trouvé que cette méthode est très efficace:
let mymin=$(date '+1%M') ; let mymin=$mymin%100
Cela donne toujours une valeur décimale. Donc je peux faire ceci:
if [[ $mymin -le 1 ]]; then # only 0 and 1 are true.
Il n'y a pas de problème avec 08 ou 09 de cette façon. L'utilisation de% 10 au lieu de% 100 vous donne des gammes de dix minutes de 0 à 9. Je trouve également les valeurs décimales, sans que les zéros sont de premier plan:
echo "$((10#$(date +%M)))"
Portablement, vous pouvez facilement supprimer un 0
à partir d'une variable. Cela laisse la variable inchangée s'il n'y a pas de dirigeant 0
.
eval $(date +"h=%H m=%M")
h=${h#0}
m=${m#0}
say "$h hours and $m minutes"
À Bash, Ksh ou ZSH, vous pouvez utiliser les modèles de globules supplémentaires de KSH pour supprimer n'importe quel nombre de dirigeants 0
s. En bash, courez shopt -s extglob
premier. Dans ZSH, courez setopt kshglob
premier.
eval $(date +"h=%H m=%M")
h=${h#+(0)}
m=${m#+(0)}
say "$h hours and $m minutes"
En général à Bash:
test ${#number} -eq 2 && number=${number#0}
résultant en
date +"%H %M" |
{ read hours minutes
hours=${hours#0}
minutes=${minutes#0}
echo "${hours} hours and ${minutes} minutes"; }
Ou, différent:
date +"%H hours and %M minutes" | sed -n -e 's/0\([0-9]\)/\1/g' -e p
Je suis surpris que la date ne dispose pas d'options de format appropriées.