想要将命令echo ^`date`的结果赋给变量。但是当我想要做的时候,我没有得到例外的结果

时间:2015-01-21 13:12:34

标签: linux bash

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

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

实际结果:

^date

预期结果:

^Wed Jan 21 05:49:37 CST 2015

需要帮助

3 个答案:

答案 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 versionthe $() 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分配给deepsecho $deeps然后获取^date

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

deeps=$(echo ^$(date))

解析为

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

在结果上正确运行dateecho。但是,如其他答案中所示,包裹echo不是必需的,因为deeps=^$(date)本身可以正常工作。