【问题标题】:Can cat print variables inline from a text file? bashcat 可以从文本文件内联打印变量吗?重击
【发布时间】:2015-12-16 22:52:01
【问题描述】:

使用 bash,我正在尝试打印整个文本文件,包括文本文件中的变量值而不是文字文本 ($var)。

txtfile.txt

Here is some text. $var1 Here is some more. $var2

使用猫

    cat txtfile.txt

打印

这里有一些文字。 $var1 这里还有一些。 $var2

如何让它在输出中扩展 $var1 和 $var2 的值?

【问题讨论】:

  • 这些变量从何而来? Arw 那些 Bash 变量?还是环境变量?
  • BinaryZebra 指出了我在回答中犯的一个错误,因此我将其删除。这样做的任何东西都存在固有的安全问题,因为文件可能包含表达式$(run this command as you)
  • 你可以试试echo -e "$(cat file)"
  • @Mahesh Kharvi 不,这不会扩展变量。

标签: bash variables cat


【解决方案1】:

执行变量扩展的唯一方法是在 shell 解析一行时。

这只能通过创建一个 var: 由 shell 处理的行来完成。

这可以通过命令eval 或调用sh -c "$var" 来完成。

这将满足您的要求(这是一个非常不安全的想法):

#!/bin/bash
var1="This is OnE var"
var2="This is var TwO"

while read -r line; do
   eval echo "$line"
done <txtfile.txt

文件 txtfile.txt 包含:

this is var1=$var1 inside
the file, and var2=$var2.

上面的脚本会输出:

this is var1=This is OnE var inside
the file, and var2=This is var TwO.

【讨论】:

    【解决方案2】:

    执行此操作的更安全的方法是自己扩展您想要允许的变量。这不会使用 shell 替换运行潜入文件本身的命令,例如 $(chmod -R 777 ~ | true)

    例如:$(sed -r -e "s/\\\$var1\\b/$var1/g" -e "s/\\\$var2\\b/$var2/g" &lt; file.txt)。你也可以使用perl

    请注意,在此示例中,您必须将 $var1$var2 本身内的任何 / 定界符实例转义。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多