是否有理由在日期参数中使用 \+ 或 \-?

-2 cron shell-script syntax

我用来date \+%F\-%T以这种格式显示日期和时间:2019-08-15-21:34:58.

来自man date

%F完整日期;与 %Y-%m-%d
%T时间相同;与 %H:%M:%S 相同

我承认没有解释\+\-

后来我明白反斜杠是转义的,加号是参数前缀,连字符只是一个类似字符串的分隔(日期-时间),
而且,有些人使用更简单的+'%F-%T'+"%F-%T"代替。

是否有理由在日期参数中使用 + 或 - ?

Kus*_*nda 6

反斜杠什么都不做。

-+字符不需要进行转义,因为他们没有在任何shell的语法任何方式特殊。

$ set -o xtrace
Run Code Online (Sandbox Code Playgroud)
$ date +%F-%T
+ date +%F-%T
2019-08-15-11:51:46
Run Code Online (Sandbox Code Playgroud)
$ date \+%F\-%T
+ date +%F-%T
2019-08-15-11:51:50
Run Code Online (Sandbox Code Playgroud)

正如您在上面的跟踪输出中所看到的,无论反斜杠如何,shell 执行的命令都是相同的。还要注意,跟踪输出只是来自 shell 的“调试输出”,它输出的任何命令通常都不适合 shell input

+引入了一个date格式规范。而这-只是一个文字破折号,是格式规范的一部分(也将是输出中的破折号)。

命令date \+%F\-%Tdate +%F-%T. 您通常还会看到引用的日期格式,如date +'%F-%T'. 这在这里没有区别,因为格式是一个单词,但date +'%F %T'需要引用它以防止 shell 将空格上的格式拆分为两个单独的参数date

什么确实有差别是%字符。如果您在 crontab 规范中使用它们,您会想要转义它们。参见例如如何在 cron 选项卡作业中执行`date`?

%字符在fish3.0 版之前的shell语法中是特殊的(用于作业扩展),但仅当出现在单词的第一个字符时(因此在 a 之后时不是+)。类似地,在 中zsh,前导%字符的特殊之处在于它的?后面不作为 glob 运算符(允许kill %?cmd无需引用?),但这同样不适用于此处。