将时间戳更改为纪元使用 Bash 获取错误,例如额外操作数

roa*_*nai 0 bash shell-script date timestamps

我在 Bash 脚本中定义了一个变量,例如:

BIRTHDAY="1993-01-11 11:11 +08:00"
Run Code Online (Sandbox Code Playgroud)

并将其转换为纪元,date然后echo使用echo $(date -d $BIRTHDAY +%s).

但是,我收到错误:date: extra operand ‘+08:00’

但是,它适用于 bash 交互式 shell:

?  ~ BIRTHDAY="1993-01-11 11:11 +08:00"
?  ~ date -d $BIRTHDAY +%s
726721860
?  argos echo $(date -d $BIRTHDAY +%s)
726721860
Run Code Online (Sandbox Code Playgroud)

我也尝试运行echo $(date -d \"$BIRTHDAY\" +%s),这也不起作用。

那么,它有什么问题呢?

ImH*_*ere 5

你需要引用"$BIRTHDAY",像这样:

echo $(date -d "$BIRTHDAY" +%s)
Run Code Online (Sandbox Code Playgroud)

看来您实际上是在使用 zsh 作为交互式 shell,因为它是此命令唯一可以正常工作的命令(具有默认 IFS 值):

date -d $BIRTHDAY +%s
Run Code Online (Sandbox Code Playgroud)

无论如何,即使在 zsh 中,引用变量也是有帮助的:

date -d "$BIRTHDAY" +%s
Run Code Online (Sandbox Code Playgroud)