La commande date
n'est pas une partie de bash. Il est fourni par votre système d'exploitation et son comportement diffère selon les systèmes d'exploitation. Notamment, la date GNU coreutils (dans la plupart des distributions Linux) a une option -d
utilisée pour interpréter les dates source, tandis que la date BSD a une option -f
pour interpréter les dates d'entrée spécifiquement formatées et une option -v
pour ajuster les temps par différentes unités.
Vous avez déjà une réponse acceptée pour l'option Linux. Pour être complet à ce sujet, voici une option BSD (et Mac OS):
$ for ((s=0; s<86400; s+=610)); do date -j -v+${s}S -f '%H:%M:%S' "$time" '+%T'; done | head -5
00:00:00
00:10:10
00:20:20
00:30:30
00:40:40
sortie est évidemment coupé ici 5 lignes.
Bien sûr, il s'agit toujours d'une plate-forme spécifique. Si vous voulez quelque chose qui fonctionnera avec bash partout, puis aussi longtemps que vous utilisez bash> 4.2, ce qui suit pourrait faire:
$ offset=$(printf '%(%z)T\n' 0)
$ for ((s=$((${offset:1:2}*3600 + ${offset:3}*60)); s<86400; s+=610)); do printf '%(%T)T\n' "$s"; done | head -5
00:00:00
00:10:10
00:20:20
00:30:30
00:40:40
La variable $offset
nous permet de compenser le fait que vous pouvez ne pas être en UTC. :) Comme la solution date
, cette étape passe par des incréments de 610 secondes, mais utilise le format de printf
pour générer une sortie. Vous pouvez avec ajouter ou soustraire le décalage de fuseau horaire au point final 86400 pour obtenir une journée complète de fois. La manipulation est laissée comme un exercice pour le lecteur. :-)
Vous devriez clarifier les objectifs et les contraintes que vous avez, surtout s'il s'agit d'une question de devoirs (si oui, cela devrait être étiqueté comme tel).Exécuter un exécutable externe tel que 'date' plusieurs fois dans une boucle peut être très lent, mais peut grandement simplifier le code. Si vous avez besoin d'améliorer la performance, vous devrez coder quelque chose de plus complexe et faire l'incrémentation, le module et le porter vous-même. Bash n'a pas de concept de "variable temps". Si vous utilisez 'date', vous devez utiliser quelque chose qu'il comprend (votre premier exemple, peut-être). Sinon, vous devrez utiliser les chaînes et les entiers de Bash. –