【问题标题】:bash: How to replace all variable names with their values after `cat` a file?bash:如何在`cat`文件之后用它们的值替换所有变量名?
【发布时间】:2016-11-15 08:47:26
【问题描述】:

A.txt 包含以下内容:$x + $y = $z

我想cat A.txt 会回显$x + $y = $z,但我想用它们的值替换变量,有什么办法吗?

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

为什么cat 不起作用?以及怎么做?

【问题讨论】:

  • 如果您有权访问 envsubst(来自 gettext-base 包)并且您的变量已经导出:envsubst < A.txt

标签: linux bash replace echo cat


【解决方案1】:

我能想到的只有

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

虽然这不是很动态。

【讨论】:

  • 实际上我有 120 个变量(24 小时 * 5 列),我不会为此使用 sed,我正在寻找替代的自动替换。
【解决方案2】:

使用评估:

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

【讨论】:

  • 谢谢!它可以工作,但为什么eval cat A.txt 不能这样工作?
  • eval echo $(cat A.txt) eval 将所有变量替换为其值。 eval cat A.txt 不包含任何变量,因此它运行 cat A.txt
  • @Ipo 如果 A.txt 包含重定向,这将不起作用。在这种情况下,您应该运行类似while read line; do eval echo '"'$line'"'; done &lt; A.txt
  • @davidedb 整数在极少数情况下包含重定向。
猜你喜欢
  • 2020-01-08
  • 2014-10-01
  • 2023-04-10
  • 2019-03-28
  • 2014-01-28
  • 2014-09-08
  • 2013-12-10
  • 2020-08-14
  • 2014-12-07
相关资源
最近更新 更多