要分配的命令回声^`date`给一个变量的结果。 但是,当我试图做我没有得到的结果除外(Want

2019-11-03 14:49发布

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

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

实际结果:

^date

预期结果 :

^Wed Jan 21 05:49:37 CST 2015

需要这个帮助

Answer 1:

试试这个方法

deeps=^$(date)
echo $deeps

输出:

^Wed Jan 21 18:44:25 IST 2015

反引号是可怕的过时,不应该被用于任何更多的 - 使用$(),而不是将节省你很多麻烦



Answer 2:

使用反引号,或者使用命令替换 。 喜欢

# Shell command substitution.
echo ^$(date)

要么

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

两个输出(所要求的)

^Wed Jan 21 08:16:01 EST 2015


Answer 3:

很简单,因为没有其他的(正确的)答案其实解释我加入另一个答案的问题。

TL;博士比较了反引号的版本到了$()版本

和...之间的不同

echo ^`date`

deeps=`echo ^`date``

是许多反引号是如何上线以及如何壳解析线。

echo ^`date`

有一个单一的对反引号的和壳解析它作为(其中[]的线被标记“份”)

[echo] [^][`date`]

`date`

位,然后通过扩展命令替换等行成为

[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]

然后分配^datedeepsecho $deeps ,然后让你^date

$()命令替换,没有另一方面的形式, 确实巢并因此

deeps=$(echo ^$(date))

作为解析

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

正确运行两个dateecho的结果。 虽然,在其他的答案表明,包装echo是没有必要的deeps=^$(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
标签: linux bash