我目前正在学习zsh,现在想使用strftime
,但是出现了以下错误:
zsh: command not found: strftime
我认为我做错了什么,因为我经常看到其他人在他们的dotfiles中使用该函数。
我目前正在学习zsh,现在想使用strftime
,但是出现了以下错误:
zsh: command not found: strftime
我认为我做错了什么,因为我经常看到其他人在他们的dotfiles中使用该函数。
strftime
是在一个名为 datetime
的 zsh
模块中定义的。使用 zmodload
命令可以从 $module_path
中以冒号分隔的目录列表加载模块。
在我的系统上:
% echo $module_path
/usr/lib/zsh/4.3.10
% ls -l $module_path
drwxr-xr-x 3 root root 4096 2009-11-05 01:03 zsh
% ls -l $module_path/zsh/datetime*
-rw-r--r-- 1 root root 9828 2009-09-10 02:45 /usr/lib/zsh/4.3.10/zsh/datetime.so
% type -a strftime
strftime not found
% zmodload zsh/datetime
% strftime %Y-%m-%d 1271603087
2010-04-18
% type -a strftime
strftime is a shell builtin
% /bin/date -d @1271603087 +%Y-%m-%d
2010-04-18
对于通过谷歌搜索到这里的任何人,现在有一种方法可以实现此操作,而不需要使用zmodload
。(我使用它来检测当由于资源争用导致.zshrc运行缓慢时,因此我不希望它添加新的文件系统请求。)
${(%):-"%D{STRFTIME_STRING_HERE}"}
这段话的要点如下:
VAR
的情况下进行${VAR:-DEFAULT}
参数替换。VAR
前加上(%)
,可以扩展PS1
和其他类似的替换标记。(这是一个非常强大的功能,因为它还可以访问像%F{green}
这样的东西。请参阅man zshmisc
中的"扩展提示序列"了解更多信息。)%D{...}
调用strftime(3)
。我发现%D{%s}
特别有用,因为%s
可以检索“自纪元以来的秒数”时间戳,然后您可以对其进行算术运算。
(只需注意,虽然%s
支持Linux、AIX、Illumos、MINIX、OSX和所有BSD系列系统,但它不是POSIX的一部分,并且在Solaris、HP-UX、UnixWare、OpenServer或Windows库Cygwin和MinGW依赖的在线strftime
文档中未列为受支持的内容。)
strftime
是一个 C 函数,我相信在命令行中 date
有同样的功能。
更多信息请参见 man date
。
使用 --date=STRING
选项来指定要格式化的日期,而不是获取当前时间。