2010-02-18 52 views
3

Cygwin用戶在這裏(儘管如果有合適的解決方案,我將把它帶到K/Ubuntu,我也使用它)。BASH:你如何「拆分」日期命令?

我在我的.bashrc一個值得歡迎的消息,看起來像以下:

SAD=(`date +%A-%B-%d-%Y`) 
DUB=(`date -u +%k:%M`) 
printf "Today's Date is: ${SAD}.\n" 
printf "Dublin time is now ${DUB}. (24-Hour Clock)\n" 

多次試圖在變量SAD上述使用空格之後,我給在和使用連字符表示。但可以理解的是,我對這個創可貼解決方案並不滿意。我記得的問題是,每次我嘗試使用引號空格,\ s或一些類似的轉義標記以及日期的GNU手冊頁的相應部分中列出的變量時,年份的變量被忽略或者返回一個錯誤。我不想要做的是使用日期返回的完整字符串,而是保留上面代碼中的東西的順序。

在我寫這篇文章時,我發現圍繞此代碼設置歡迎消息的IFS可能會奏效,前提是我將它恢復爲默認值(以上出現在68行.bashrc的第13-17行)。但是,我不記得如何做到這一點,我也不確定它會起作用。

一般來說,.bashrc文件是採用有效的BASH語法,不是嗎?我的確很像我自己編寫或者從其他來源測試過的腳本。我想我所缺少的是用於設置和取消設置此消息塊周圍字段分隔符的代碼。

毫無疑問,任何提出解決方案的人都不僅會幫助我,還會幫助網絡上的任何其他相關新手採取shell腳本世界的第一步(或第十三步到第十七步)。

BZT

回答

4

SAD=$(date "+%A %B %d %Y") 
DUB=$(date -u +%k:%M) 
echo "Today's Date is: ${SAD}." 
echo "Dublin time is now ${DUB}. (24-Hour Clock)" 

在我.bash_profile打印

Today's Date is: Thursday February 18 2010. 
Dublin time is now 12:55. (24-Hour Clock) 

我想這就是你想要的。

+0

對我在網上任何地方發佈的任何問題的最快答覆。但是對於StackOverflow廣告服務器的滯後性,我可能會在堆疊(npi)時看到它們。除了我自己,我還要感謝所有的受訪者。 BZT – silversleevesx 2010-02-18 13:22:56

1

問題在於你的數組聲明。

SAD=(date +%A-%B-%d-%Y)只是意味着你把字符串 「日期」 爲元素0, 「+%A%B-%D-%Y」 爲元素1.看到自己

$ SAD=(date +%A-%B-%d-%Y) #<-- this is an array declaration 
$ echo ${SAD[0]} 
date 
$ echo ${SAD[1]} 
+%A-%B-%d-%Y 

,如果你希望「date」命令的值是一個變量,使用$(..),如

$ SAD=$(date +%A-%B-%d-%Y) 
$ echo ${SAD} 
Thursday-February-18-2010 
0

要獲得空間,你需要的參數報價以date因此,它是一個單一的字符串。你也錯誤地將SADDUB聲明爲數組,當你真正要做的是評估它們。試試這個:

[/tmp]> $(date "+%A %B %d, %Y") 
Thursday February 18, 2010 
0

date +%A\ %B\ %d\ %Y

+0

您可以使用報價 – ghostdog74 2010-02-18 13:16:28

0

我發現,工作的組合:
SAD=$(date "+%A %B %d %Y")
echo $SAD
Thursday February 18 2010

另一個實例時:

  1. 它支付問一個問題
  2. 它有助於瞭解哪裏放你的雙引號。
    date顯然不知道從引用的空間,但Bash確實如此,所以
    這是一個「在右耳邊竊竊私語」的問題。

謝謝ghostdog74。

BZT