Il comando non è date
parte di bash. È fornito dal tuo sistema operativo e il suo comportamento è diverso nei diversi sistemi operativi. In particolare, la data di GNU coreutils (nella maggior parte delle distribuzioni Linux) ha un'opzione -d
utilizzata per interpretare le date di origine, mentre la data di BSD ha un'opzione -f
per interpretare date di input formattate in modo specifico e un'opzione -v
per la regolazione dei tempi da parte di varie unità.
Hai già una risposta accettata per l'opzione Linux. Per essere completa su questo, ecco un BSD (e MacOS) opzione:
$ 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
uscita qui è ovviamente tagliato a 5 righe.
Naturalmente, questo è ancora specifico della piattaforma. Se si desidera qualcosa che lavorerà con bash ovunque, quindi fino a quando si sta utilizzando bash> 4.2, il seguente potrebbe fare:
$ 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 variabile $offset
ci permette di compensare il fatto che si può non essere in UTC. :) Come la soluzione date
, questa procedura prevede incrementi di 610 secondi, ma utilizza il formato %T
di printf
per generare l'output. È possibile aggiungere o sottrarre l'offset del fuso orario al punto finale 86400 per ottenere un giorno intero di volte. Gestione che viene lasciata come esercizio per il lettore. :-)
È necessario chiarire gli obiettivi e i vincoli che si hanno, soprattutto se si tratta di una domanda a casa (in tal caso, dovrebbe essere contrassegnata come tale).Eseguire un eseguibile esterno come 'date' molte volte in un ciclo può essere molto lento, ma può semplificare notevolmente il codice. Se hai bisogno di migliorare le prestazioni, dovrai codificare qualcosa di più complesso e fare l'incremento, il modulo e portare te stesso. Bash non ha un concetto di "variabile temporale". Se usi 'date' devi usare qualcosa che capisce (il tuo primo esempio, forse). Altrimenti dovrai usare le stringhe e gli interi di Bash. –