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

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

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

man date

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

我没有认识到\+或 的任何解释\-

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

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

答案1

反斜杠什么也不做。

-和字符+不需要转义,因为它们在任何 shell 的语法中都没有任何特殊之处。

$ set -o xtrace
$ date +%F-%T
+ date +%F-%T
2019-08-15-11:51:46
$ date \+%F\-%T
+ date +%F-%T
2019-08-15-11:51:50

正如您在上面的跟踪输出中看到的,无论反斜杠如何,shell 执行的命令都是相同的。还要注意,跟踪输出只是 shell 的“调试输出”,并且它输出的任何命令一般来说不适合外壳输入

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

命令date \+%F\-%T与 相同date +%F-%T。您通常还会看到引用的日期格式,如 中所示date +'%F-%T'。这在这里没有什么区别,因为格式是单个单词,但date +'%F %T'需要用引号引起来,以防止 shell 将空格上的格式拆分为两个单独的参数date

什么有所不同的是%角色。如果您在 crontab 规范中使用它们,您可能希望转义它们。参见例如如何在 cron 选项卡作业中执行“date”?

%字符在 3.0 版本之前的 shell 语法中是特殊的fish(用于作业扩展),但仅限于单词的第一个字符(因此在 a 之后时不是+)。类似地,在 中zsh,前导%字符很特殊,因为?它后面的字符不被视为全局运算符(以允许类似的操作而kill %?cmd不必引用?),但这同样不适用于此处。

相关内容