2010-02-18 50 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