的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