Mac终端中date '+%s%N'命令无法运行的原因及解决办法
这个问题的核心在于Linux和macOS用的是不同版本的date命令——Linux搭载的是GNU版本,而macOS默认是BSD版本,%N(纳秒)是GNU date独有的格式参数,BSD date根本不认识它,所以才会把%N当成普通字符输出,导致后续出现数值解析错误。
给你几个不同场景的解决方案:
1. 安装GNU版本的date(最推荐,和Linux体验完全一致)
如果你经常在macOS上写Linux兼容的脚本,直接装GNU coreutils包是一劳永逸的办法:
- 用Homebrew安装coreutils(如果没装Homebrew,自行搜索安装方式即可):
brew install coreutils - 安装完成后,GNU
date会被命名为gdate,把你的命令改成这样就和Linux上一模一样了:CURRENT_TIME=$(gdate '+%s%N'); echo "$CURRENT_TIME"
2. 用系统自带工具替代(无需额外安装)
如果不想折腾Homebrew,macOS默认自带的Python或Perl都能帮你获取同样的高精度时间:
Python版本(系统默认带Python3)
CURRENT_TIME=$(python3 -c 'import time; print(int(time.time() * 10**9))'); echo "$CURRENT_TIME"
这个命令会输出秒数×10^9的整数,和date '+%s%N'的结果完全一致。
Perl版本(同样是系统自带)
CURRENT_TIME=$(perl -MTime::HiRes=time -e 'printf "%.0f\n", time()*1e9'); echo "$CURRENT_TIME"
3. 降级精度用BSD date原生参数(仅毫秒级)
如果你的场景不需要纳秒这么高的精度,BSD date支持%3N输出毫秒(3位数字),命令如下:
CURRENT_TIME=$(date '+%s%3N'); echo "$CURRENT_TIME"
输出格式是秒数+3位毫秒,比如1654778186123,足够大多数脚本场景使用。
内容的提问来源于stack exchange,提问作者sysSTD
相关产品推荐
相关产品推荐

