2016-11-15 130 views
-1

A.txt包含以下内容:$x + $y = $zbash:如何在`cat`文件后用它们的值替换所有变量名?

我想cat A.txt这将呼应$x + $y = $z,但我想要的变量与他们的价值观所取代,什么办法?

让我们看看另一个简单的测试: B.txt包含$x,我们可以使用echo `echo \$x`但既不echo $(echo \$x)也不echo `cat B.txt`

为什么cat不到风度的工作?以及如何做到这一点?

+2

如果您有机会获得'envsubst'(Gettext中的基包)和您的变量已经远销:'envsubst Cyrus

回答

0

所有我能想到的是

x=2 
y=1 
z=3 
cat A.txt | sed -e "s/\$x/$x/" -e "s/\$y/$y/" -e"s/\$z/$z/" 

这不是非常有活力,但。

+0

其实我有120变量(24小时* 5列),我不会使用'sed',我正在寻找替代的自动替换。 – Mosty

-1

使用eval:

$ x=1 
$ y=2 
$ z=3  
$ eval echo $(<A.txt) 
1 + 2 = 3 
+0

谢谢!它可以工作,但为什么'eval cat A.txt'不会像这样工作? – Mosty

+0

'eval echo $(cat A.txt)'eval将所有变量替换为它们的值。 'eval cat A.txt'不包含任何变量,所以它运行'cat A.txt'。 –

+0

@Ipo如果A.txt包含重定向,则这不起作用。在这种情况下,你应该运行'while read line;做eval echo''''$ line''';完成 davidedb

相关问题