我用来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
不必引用?
),但这同样不适用于此处。