如果我在 Ubuntu 上运行以下命令行:
var="$(date +"%x %r %Z")"
echo var
我可以得到所需的输出。但如果我只是运行
date +%x %r %Z
我会得到错误:
日期:额外操作数‘%r’
尝试“date--help”获取更多信息。
那么 date 命令对应的是什么var="$(date +"%x %r %Z")"
?谢谢。
答案1
您没有复制完全相同的命令。您写date +"%x %r %Z"
在括号内。这在外面工作得很好。否则,date
有三个参数(+%x
、%r
和%Z
),而不是一个(+%x %r %Z
)。
从man bash
:
使用 $(command) 形式时,括号内的所有字符组成命令;没有字符
会被特殊处理。命令替换可以嵌套。
括号在评估内容之前进行匹配,因此命令不会被拆分为$(date +%x
, %r
, %Z)
。
注意:
您忘记了$
的echo $var
。
答案2
那么var="$(date +"%x %r %Z")"对应的date命令是什么?
嗯,正如您在另一个答案中指出的那样,您错过了正确引用选项,它至少应该是:
date +"%x %r %Z"
这是必要的,因为你使用空格来区分不同的信息,日期手册页建议使用-
, 或_
,这样您可以在普通终端中省略所有引用,或者转义空格。
例子:
使用“-”作为分隔符
date +%x-%r%Z
输出结果如下:
21.09.2018-11:30:15 CEST
使用 '_' 作为分隔符
date +%x_%r%Z
输出结果如下:
21.09.2018_11:30:15 CEST
使用转义的空格作为分隔符
date +%x\ %r%Z
输出结果如下:
21.09.2018 11:30:15 CEST
根本不使用分隔符
date +%x%r%Z
输出结果如下:
21.09.201811:30:15 CEST
特殊用例的余数。当您尝试将日期合并到crontab
命令中时,您还需要转义符号%
。因此,作为完整信息,命令将如下所示(之前提到的规则仍然适用于转义):
date +\%x\%r\%Z