[英]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.