BASH:你如何“拆分”日期命令?

时间:2010-02-18 12:48:34

标签: date string-formatting bash ifs

Cygwin用户在这里(虽然如果有合适的解决方案,我会把它带到K / Ubuntu,我也会使用它。)

我的.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或类似的转义标记,以及 date 的GNU联机帮助页的相应部分中列出的变量时,该变量for Year被忽略或返回错误。我不想要做的是使用 date 返回的完整字符串,而是保持上面代码中的内容顺序。

在我写这篇文章时,我发现在欢迎消息的代码周围设置IFS可能会有效,前提是我之后将其返回到默认值(上面显示在68行.bashrc的第13-17行) 。但是,我不记得怎么做,我也不确定它会起作用。

一般来说,.bashrc文件是有效的BASH语法,不是吗?我当然喜欢我自己编写或从其他来源测试的脚本。我想,我所缺少的是用于设置和取消设置此消息块周围的字段分隔符的代码。

毫无疑问,提出解决方案的任何人都不仅会对我有所帮助,而且会对网络上的任何其他相关新手采取他们在shell脚本编写世界中的第一步(或第13至第17步)。

BZT

5 个答案:

答案 0 :(得分: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)

我认为这就是你想要的。

答案 1 :(得分:1)

问题是你的数组声明。

SAD=(date +%A-%B-%d-%Y)只是意味着您将字符串“date”作为元素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

答案 2 :(得分:0)

要获取空格,您需要将参数引用到date,以便它是单个字符串。您还错误地将SADDUB声明为数组,而您真正要做的就是对它们进行评估。试试这个:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我找到了有效的组合:
SAD=$(date "+%A %B %d %Y")
echo $SAD
Thursday February 18 2010

另一个例子:

  1. 提出问题是值得的
  2. 知道在哪里放双引号会有所帮助 日期显然不知道引用空格,但Bash确实如此,所以
    这是“在右耳中窃窃私语”的问题。
  3. 谢谢ghostdog74。

    BZT