3

此处的 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 或一些类似的转义标记,以及 GNU 手册页的相应部分中列出的变量date时,Year 的变量要么被忽略,要么被返回一个错误。我不想做的是求助于date返回的完整字符串,而是保持我在上面代码中的顺序。

在我写这篇文章时,我突然想到,为欢迎消息设置此代码的 IFS 可能会起作用,前提是我之后将其恢复为默认值(上面出现在 68 行 .bashrc 的第 13-17 行)。但是,我不记得如何做到这一点,我也不确定它会起作用。

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

毫无疑问,任何想出解决方案的人不仅对我有帮助,而且对网络上任何其他在 shell 脚本世界中迈出第一步(或第十三到第十七步)的相对新手都有帮助。

BZT

4

5 回答 5

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)

我想这就是你想要的。

于 2010-02-18T12:56:53.573 回答
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

如果您希望“日期”命令的值在变量中,请使用$(..),例如

$ SAD=$(date +%A-%B-%d-%Y)
$ echo ${SAD}
Thursday-February-18-2010
于 2010-02-18T12:55:00.750 回答
0

要获取空格,您需要引用参数以date使其成为单个字符串。当您真正要做的是评估它们时,您还错误地将其声明为SAD数组。DUB试试这个:

[/tmp]> $(date "+%A %B %d, %Y")
Thursday February 18, 2010
于 2010-02-18T12:55:17.710 回答
0

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

于 2010-02-18T12:58:39.423 回答
0

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

另一个例子是:

  1. 提出问题是值得的
  2. 它有助于知道在哪里放置双引号。
    date显然不知道引用的空格,但 Bash 知道,所以
    这是“在右耳耳语”的问题。

谢谢ghostdog74。

BZT

于 2010-02-18T13:13:29.397 回答