gpt4 book ai didi

linux - 关于在 linux shell 脚本中打印格式化的日期时间

转载 作者:太空宇宙 更新时间:2023-11-04 11:03:48 31 4
gpt4 key购买 nike

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

但是,当我想在 shell 脚本中获取结果时,出现错误:“date: illegal time format”,为什么?

#!/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 还是其他一些 shell。

最简单的解决方案应该适用于除最古老的 Bourne shell 之外的所有 shell,那就是创建一个函数:

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[@]}"

关于linux - 关于在 linux shell 脚本中打印格式化的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26052086/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com