jayvardhan Asked: 2024-01-21 13:47:25 +0800 CST2024-01-21 13:47:25 +0800 CST 2024-01-21 13:47:25 +0800 CST 从日期中删除分钟作为变量 772 我正在 KSH 中编写一个脚本,需要您的帮助来找到从日期中删除分钟和秒的逻辑。如果用户将 2024-12-22-16-43-40 传递给变量,则应将其转换为 2024-12-22-16-00-00。 date 2 个回答 Voted Best Answer Stéphane Chazelas 2024-01-21T18:30:53+08:002024-01-21T18:30:53+08:00 在包括 ksh 在内的任何 POSIX shell 中(POSIX sh 规范实际上基于 ksh(其子集),并且${var%pattern}扩展到其末尾$var匹配的最短字符串的 stripped值的运算符实际上是 ksh 在 80 年代早期引入的) pattern: $ date=2024-12-22-16-43-40 $ printf '%s\n' "${date%-*-*}-00-00" 2024-12-22-16-00-00 在这里,您想要执行的字符串操作多于日期操作,但请注意,内置printf的ksh93可以执行后者。然而,2024-12-22-16-43-40 格式并不属于它默认支持的时间戳格式。 但是,您可以使用标准DATEMSK环境变量指定其他时间戳格式。 $ echo '%Y-%m-%d-%H-%M-%S' > timefmt $ export DATEMSK="$PWD/timefmt" $ printf '%(%F-%H-00-00)T\n' "$date" 2024-12-22-16-00-00 waltinator 2024-01-21T16:21:09+08:002024-01-21T16:21:09+08:00 类似于:(将其视为文本字符串) #!/bin/ksh d="2024-12-22-16-43-40" s="$(echo "$d" | cut -d- -f1-4 )" t="${s}-00-00" echo "$t" 或者,将其视为“日期/时间”,读取man date,date解析您的日期,然后通过 `date +"%Y-%m-%d-00-00" 输出它
在包括 ksh 在内的任何 POSIX shell 中(POSIX sh 规范实际上基于 ksh(其子集),并且
${var%pattern}
扩展到其末尾$var
匹配的最短字符串的 stripped值的运算符实际上是 ksh 在 80 年代早期引入的)pattern
:在这里,您想要执行的字符串操作多于日期操作,但请注意,内置
printf
的ksh93
可以执行后者。然而,2024-12-22-16-43-40 格式并不属于它默认支持的时间戳格式。但是,您可以使用标准
DATEMSK
环境变量指定其他时间戳格式。类似于:(将其视为文本字符串)
或者,将其视为“日期/时间”,读取
man date
,date
解析您的日期,然后通过 `date +"%Y-%m-%d-00-00" 输出它