BASH:如何“分割”date命令?

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 manpage适当部分中列出的变量时,年份变量要么被忽略,要么返回错误。我不想做的是诉诸于date返回的完整字符串,而是保持我在上面代码中的顺序。
当我写这篇文章时,我想到可能可以在欢迎消息的代码周围设置IFS,前提是我在之后将其返回默认值(以上内容出现在68行的.bashrc文件的13-17行)。但是,我不记得如何做了,也不确定它是否有效。
一般来说,.bashrc文件符合有效的BASH语法,对吗?我的肯定与我自己编写或从其他来源测试过的脚本相似。我所缺少的只是设置和取消设置字段分隔符的代码。
毫无疑问,任何能够找到解决方案的人不仅会为我,也会为网络上的任何其他新手(或第十三至十七步)在shell脚本世界中迈出第一步的人提供帮助。
BZT
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)

我认为那正是你想要的。


我在互联网上发布的任何问题都得到了最快的回复。但由于StackOverflow广告服务器的滞后,我可能会看到它们正在堆叠(npi)。除了我自己之外,感谢所有回答者。BZT - silversleevesx

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

0
要获取空格,您需要引用date的参数,以便它成为单个字符串。您还错误地将SADDUB声明为数组,而实际上您想要做的是对它们进行评估。请尝试以下操作:
[/tmp]> $(date "+%A %B %d, %Y")
Thursday February 18, 2010

0

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


0

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

又是一个例子说明:

  1. 提问是有回报的
  2. 知道在哪里放置双引号是有帮助的。
    date 显然不知道引用空格,但 Bash 知道,所以这是“对正确的人耳语”的问题。

感谢 ghostdog74。

BZT


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接