Bash `base64--decode`不会像'echo'那样用值替换变量

Bash `base64--decode`不会像'echo'那样用值替换变量,bash,shell,base64,Bash,Shell,Base64,我使用AWS ec2模板/实例的用户数据。 为此,我将我的文件转换为base64,以便于操作 然而,shell/bash不会使用变量的值对其进行扩展 例如,我将其简化为一个简单变量 jhtmrvntt1bftn0gig9yicrmrvnt1bftg==被解码为${LESSOPEN}或$LESSOPEN 结果: >${LESSOPEN}或$LESSOPEN我不确定哪一个应该起作用 预期: >Hereishtevalue或Hereishtevalue 为什么$LESSOPEN和/或${LESSOPE

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

然而,shell/bash不会使用变量的值对其进行扩展

例如,我将其简化为一个简单变量

jhtmrvntt1bftn0gig9yicrmrvnt1bftg==被解码为${LESSOPEN}或$LESSOPEN

结果:

>${LESSOPEN}或$LESSOPEN我不确定哪一个应该起作用 预期:

>Hereishtevalue或Hereishtevalue 为什么$LESSOPEN和/或${LESSOPEN}不被值替换

目标是执行以下操作:echo jhtmrvntt1bftn0gig9yicrmrvnt1bftg==| base64-decode>myfile.txt 如何修复它


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

在注释之后,参数展开已经发生,因此字符串包含字面上的${LESSOPEN}

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

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

我不能正确理解你的问题。预期产量是多少?哪个命令起作用,哪个命令不起作用?实际上不是echo哪个替换变量,而是shell,请参见参数展开,shell读取命令时会出现这个阶段;解码jhtmrvntt1bftn0gig9yicrmrvnt1bftg==给出了文本${LESSOPEN},可以用eval重新解释,但这是有风险的,因为计算任意字符串可能会导致意外的错误results@brunorey我编辑了我的question@NahuelFouilleul那么获得预期结果的最佳方式是什么?谢谢,但这太麻烦了,我会设法找到另一种方法。根据变量的值生成多行字符串应该不会这么复杂。
variable=123
input='${variable}'
if [[ $input =~ \${([_a-zA-Z][a-zA-Z0-9]*)} ]]; then
    output=${!BASH_REMATCH[1]}
    echo "${output}"
fi