在bash中获取当前日期而不生成子进程

在bash中获取当前日期而不生成子进程,bash,subprocess,Bash,Subprocess,这个问题纯粹是好奇。通过从bash运行date命令很容易获得日期,但它是一个外部可执行文件,需要生成一个子流程。我想知道是否可以在没有子进程的情况下格式化当前时间/日期。我只能在PS1和HISTTIMEFORMAT的上下文中找到对日期/时间格式的引用。后者允许: HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S " history -s echo x=$(history) set -- $x date="$2" 这很接近,但据我所知,$(历史)生成了一个子流程 我们能做得更好

这个问题纯粹是好奇。通过从bash运行
date
命令很容易获得日期,但它是一个外部可执行文件,需要生成一个子流程。我想知道是否可以在没有子进程的情况下格式化当前时间/日期。我只能在
PS1
HISTTIMEFORMAT
的上下文中找到对日期/时间格式的引用。后者允许:

HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
history -s echo
x=$(history)
set -- $x
date="$2"
这很接近,但据我所知,
$(历史)
生成了一个子流程


我们能做得更好吗?

bash
4.2为
printf
引入了一个新的说明符;这在
bash
4.3中进行了扩展,以便在未给出参数时使用当前时间
%()T
使用括号内显示的格式展开到当前时间

$ printf '%(%Y-%m-%d_%H:%M:%S)T\n'
2016-03-25_12:38:10

对于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"
#/bin/bash
而IFS=:read-rab;做
[[$a=~rtc_time]]&&t=“${b//}”
[[$a=~rtc_日期]]&&d=“${b//}”
完成
输出:

2016-03-26 08:03:09 2016-03-26 08:03:09
酷。我应该读我的机器的
manbash
而不是。很好地,通过
printf-vdate
我将日期放入一个变量中以供进一步使用。