2012-07-17 34 views
0

对于FOO的以下值:解读命令替换从可变在bash

$ FOO='echo `echo hello`' 
$ $FOO 
`echo hello` 

我怎样才能得到预期的输出:

hello 

基本上,我怎样可以解释在一个命令替换变量的内容?

+6

http://mywiki.wooledge.org/XyProblem – 2012-07-17 21:49:37

+0

这不是一个XY问题。对于一个合法的问题,这是一个合理的问题,在我的具体情况下,这是完成我需要做的事情的唯一方法(请参阅我在答案中的评论)。我可以包含有关我的设置以及为什么我在环境变量中使用命令替换的详细信息,但这不在提供问题答案(以及任何预警警告)的范围内。 – umop 2012-07-18 17:48:28

回答

5

回答这个问题给出,

eval $FOO 

但你可能要去了解你真正的问题走错了路。

+3

这是正确的,但我不能让自己加入,因为它包含单词'eval'。 – jordanm 2012-07-17 22:25:30

+0

@jordanm'eval'有什么问题? – suvayu 2012-07-18 06:52:32

+0

@suvayu这是一个安全风险,因为您可能无法完全控制作为参数获取的字符串的值。它类似于SQL注入攻击。在这个例子中,攻击者可能会将'FOO =“rm -rf /”潜入代码中。如果可能的话,避免使用“eval”更安全(通常是)。 – chepner 2012-07-18 12:20:23

-2

试试这个

$ FOO="echo `echo hello`" 
$ $FOO 

只需更换单引号双引号

+0

从问题的措辞来看,我认为单引号是故意的。 OP希望延迟命令替换直到变量被展开。 – chepner 2012-07-18 12:22:36

+0

看到我以为他使用的命令,并没有得到正确的输出.... dats为什么我回答说“只需用双引号替换单引号”... – Debaditya 2012-07-18 13:16:22