的date
命令不可bash的一部分。它由您的操作系统提供,其行为在不同的操作系统中有所不同。值得注意的是,GNU coreutils日期(在大多数Linux发行版中)有一个-d
选项用于解释源日期,而BSD日期有一个-f
选项用于解释特定格式的输入日期和一个-v
选项用于调整各个单元的时间。
您已经为Linux选项获得了可接受的答案。要完成这一点,这里有一个BSD(和MacOS)选项:这里
$ 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
输出显然修整,以5日线。
当然,这仍然是平台特定的。如果你想要的东西,会在bash 随时随地工作,那么只要你使用bash> 4.2,下面可以做:
$ 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
的$offset
变量允许我们来补偿的事实,你可能不在UTC。 :)与date
解决方案类似,此步骤的增量为610秒,但它使用printf
的%T
格式生成输出。您可以在86400终点上添加或减去时区偏移量以获得一整天的时间。处理这是留给读者的一个练习。 :-)
你应该澄清你的目标和约束,特别是如果这是一个家庭作业问题(如果是的话,它应该被标记为这样)。在循环中多次运行诸如'date'等外部可执行文件可能会非常缓慢,但可能会大大简化代码。如果你需要提高性能,你需要编写一些更复杂的代码,并进行增量,模数和携带。 Bash没有“时间变量”的概念。如果你使用'date',你需要使用它理解的东西(可能是你的第一个例子)。否则,你将不得不使用Bash的字符串和整数。 – 2010-10-22 00:44:04