这个问题纯属好奇心。通过从bash运行date
命令很容易获得日期,但它是一个外部可执行文件,需要生成一个子进程。我想知道是否有可能在没有子进程的情况下格式化当前时间/日期。我只能在PS1
和HISTTIMEFORMAT
的上下文中找到对日期/时间格式的引用。后者允许这样做:
HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
history -s echo
x=$(history)
set -- $x
date="$2"
这很接近,但$(history)
产生了一个子进程,据我所知。
我们可以做得更好吗?
答案 0 :(得分:2)
bash
4.2为printf
引入了新的说明符;如果没有给出参数,则在bash
4.3中扩展以使用当前时间。 %()T
使用括号内显示的格式扩展到当前时间。
$ printf '%(%Y-%m-%d_%H:%M:%S)T\n'
2016-03-25_12:38:10
答案 1 :(得分:1)
使用Linux和GNU bash 4:
#!/bin/bash
while IFS=: read -r a b; do
[[ $a =~ rtc_time ]] && t="${b// /}"
[[ $a =~ rtc_date ]] && d="${b// /}"
done < /proc/driver/rtc
echo "$d $t"
输出:
2016-03-26 08:03:09