繁体   English   中英

关于在Linux Shell脚本中打印格式化的Datetime

[英]About Print formated Datetime in linux shell scripts

我在linux shell中键入:date +“%y-%m-%d%H:%M:%S”后,我得到了正确的结果,例如:14-09-26 10:47:28。

但是,当我想在shell脚本中获取结果时,出现错误:“日期:非法时间格式”,为什么?

#!/bin/sh

STR='date +"%y-%m-%d %H:%M:%S"'

echo "`$STR`"

问题在于:

#!/bin/sh

STR='date +"%y-%m-%d %H:%M:%S"'

echo "`$STR`"

当在echo命令中执行字符串时, date命令将看到三个参数:

date
+%y-%m-%d
%H:%M:%S

它试图将%H:%M:%S为日期/时间,格式为:

[[[mm]dd]HH]MM[[cc]yy][.ss]]

要么:

mmddhhmm[[cc]yy]

要么:

[MMDDhhmm[[CC]YY][.ss]]

(第一个来自Mac OS X date ,第二个来自POSIX,第三个来自GNU date )。 在这些字母中,字母对表示要设置为时间的日期的组成部分。 由于%H:%M:%S字符串不包含数字,因此它是无效的日期格式。

您如何解决这个问题?

它部分取决于/bin/sh是Bash,Korn Shell,Dash,Bourne Shell还是其他外壳。

除最旧的Bourne外壳外,最简单的解决方案应能在所有外壳中使用,即创建一个函数:

dt() { date +'%Y-%m-%d %H:%M:%S'; }

然后,您可以使用:

echo "$(dt)"

优先使用$(…)表示法而不是反引号。

注意,我拒绝使用%y 我记得Y2K的错误,即使您还太小而无法参与补救工作。

另一种技术要求支持数组(Bash,Korn shell,但不支持Dash或Bourne):

STR=( date +"%Y-%m-%d %H:%M:%S" )

echo "$( "${STR[@]}" )"

或者,更简单地说:

"${STR[@]}"

尝试自己执行任务。

 $ #!/bin/sh

   $ STR=`date +"%y-%m-%d %H:%M:%S"`

   $ echo $STR
  14-09-26 11:40:06

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM