2014-04-14 41 views
3

我有一个bash命令,如何使用反引号在命令中运行?

a=`xyz | head -n 1 | awk '{print $2}'` 

这是用来获取版本号

我使用它的次数,避免冗余,我决定把它存储为一个字符串,并执行它每当我需要,但现在只有xyz的stdout被存储到变量。

这是我如何做,

cmd="xyz | head -n 1 | awk '{print \$2}'" 
a=`$cmd` 

我在做什么错?如何解决它?还建议如果有一个更简单/更好的方式来实现它。

回答

4

建议是否有更简单/更好的实现方法。

你命令可以缩短为:

xyz | awk '{print $2; exit}' 

而且你可以创建这样的功能,而不是一个字符串存储:

mycmd() { 
    xyz | awk '{print $2; exit}' 
} 

而且使用它作为:

a=$(mycmd) 
+3

什么OP做错了引用包含shell元字符的命令(管道),他们失去了它们的效果(一切都以'xyz'的参数结束)。使用'eval'可以解决这个问题,但功能非常简洁。 –

1

看来你只想要第一场第二场ne命令xyz的输出,并将其存储在变量a中。那么为什么不直接使用Bash来做到这一点?

read _ a _ < <(xyz) 
相关问题