base64 --decode不像echo那样用值替换变量

时间:2019-03-01 11:42:27

标签: bash shell base64

我使用AWS ec2模板/实例的用户数据。 为此,我将文件转换为base64,以便于操作。

尽管如此,shell / bash并没有使用变量的值对其进行扩展。

在此示例中,我将其简化为一个简单变量。

JHtMRVNTT1BFTn0gIG9yICRMRVNTT1BFTg==被解码为${LESSOPEN} or $LESSOPEN

export LESSOPEN=Hereishtevalue
echo JHtMRVNTT1BFTn0gIG9yICRMRVNTT1BFTg== | base64 --decode
  • 结果:

    • >${LESSOPEN} or $LESSOPEN(我不确定哪个应该工作)
  • 预期:

    • >Hereishtevalue or Hereishtevalue

为什么$LESSOPEN和/或${LESSOPEN}不能替换为值?

  • 目标是要执行以下操作:echo JHtMRVNTT1BFTn0gIG9yICRMRVNTT1BFTg== | base64 --decode > myfile.txt

如何解决?

base64文件将是一个文件模板,其值取决于EC2模板/实例的用户数据中定义的变量。

1 个答案:

答案 0 :(得分:1)

在注释之后,已经发生了参数扩展,因此字符串实际上包含${LESSOPEN}

使用eval会导致安全问题,因为可以执行任意代码。例如,一种解决方法是检查字符串是否与模式匹配并使用变量间接寻址。

variable=123
input='${variable}'
if [[ $input =~ \${([_a-zA-Z][a-zA-Z0-9]*)} ]]; then
    output=${!BASH_REMATCH[1]}
    echo "${output}"
fi