想要将命令 echo ^`date` 的结果分配给一个变量。但是当我尝试这样做时,我没有得到例外的结果

Want to assign the result of the command echo ^`date` to a variable. but when i am trying to do i am not getting the excepted result

echo ^`date`
^Wed Jan 21 05:49:37 CST 2015

deeps=`echo ^`date``
echo $deeps

实际结果:

^date

预期结果:

^Wed Jan 21 05:49:37 CST 2015

需要这方面的帮助

试试这个方法

deeps=^$(date)
echo $deeps

输出:

^Wed Jan 21 18:44:25 IST 2015

反引号已经过时了,不应该再使用了——使用 $() 可以让您省去很多麻烦

使用反引号,或使用 Command substitution。喜欢

# Shell command substitution.
echo ^$(date)

# backticks.
deeps=`date`
echo ^$deeps

两者输出(请求的)

^Wed Jan 21 08:16:01 EST 2015

仅仅是因为其他(正确)答案都没有真正解释问题,所以我添加了另一个答案。

tl;dr 比较 the backtick version to the $() version

两者的区别

echo ^`date`

deeps=`echo ^`date``

是行中有多少个反引号以及 shell 是如何解析行的。

echo ^`date`

有一对反引号,shell 将其解析为([] 标记行的 "parts")

[echo] [^][`date`]

`date`

bit 然后通过 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][]

或与"words"合并

[deeps][=][^date]

然后将 ^date 分配给 deepsecho $deeps 然后让你 ^date.

命令替换的 $() 形式,不,另一方面,确实嵌套,因此

deeps=$(echo ^$(date))

解析为

[deeps][=][$([echo] [^][$([date])])]

对结果正确运行 dateecho。虽然,如其他答案所示,包装 echo 不是必需的,因为 deeps=^$(date) 本身就可以正常工作。