echo ^`date`
^Wed Jan 21 05:49:37 CST 2015
deeps=`echo ^`date``
echo $deeps
实际结果:
^date
预期结果:
^Wed Jan 21 05:49:37 CST 2015
需要帮助
答案 0 :(得分:3)
试试这个方法
deeps=^$(date)
echo $deeps
输出
^Wed Jan 21 18:44:25 IST 2015
反引号非常过时,不应再使用了 - 使用$()代替将为您节省许多麻烦
答案 1 :(得分:1)
使用反引号,或使用Command substitution。像
# Shell command substitution.
echo ^$(date)
或
# backticks.
deeps=`date`
echo ^$deeps
两个输出(请求的)
^Wed Jan 21 08:16:01 EST 2015
答案 2 :(得分:1)
仅仅因为其他(正确的)答案都没有真正解释问题我会添加另一个答案。
tl; dr将the backtick version与the $()
version
之间的区别
echo ^`date`
和
deeps=`echo ^`date``
是该行有多少反引号以及shell如何解析该行。
echo ^`date`
有一对反引号,shell将其解析为([]
标记"部分")
[echo] [^][`date`]
在
`date`
然后通过Command Substitution扩展位,因此该行变为
[echo] [^Wed Jan 21 05:49:37 CST 2015]
然后echo
吐出所需的^Wed Jan 21 05:49:37 CST 2015
。
此行
deeps=`echo ^`date``
被解析为
[deeps][=][`echo ^`][date][``]
你已经看到的是完全不同的而且不正确(这是因为反引号不能嵌套在记录中)。
此行echo ^
上有两个命令替换,空字符串因此行变为
[deeps][=][^][date][]
或使用"单词"组合
[deeps][=][^date]
然后将^date
分配给deeps
和echo $deeps
然后获取^date
。
命令替换的$()
形式,而另一方面, 嵌套,因此
deeps=$(echo ^$(date))
解析为
[deeps][=][$([echo] [^][$([date])])]
在结果上正确运行date
和echo
。但是,如其他答案中所示,包裹echo
不是必需的,因为deeps=^$(date)
本身可以正常工作。