对于某些环境变量 (
*_PASSWORD
),我想创建第二个环境变量,其中包含该变量的 Base64 编码副本 (*PASSWORD_B64
)。我有一个 bash 的工作解决方案,但我希望有一个基于 POSIX 的解决方案,因此它可以在 sh
中运行。
while read -r line; do
CMD="${line}_B64=$(echo -n "${!line}" | base64)";
export "$CMD";
done <<< $(env | grep -E "PASSWORD=" | sed 's/=.*//g')
我认为这里有两个问题:
${!line}
:我可以用eval
替换。<<<
的 while 循环:这是我可以让它工作的唯一 while 循环,因为其他方式,它将在子 shell 中运行它,并且环境变量在“父 shell”中不可见.有办法让它运行在
sh
吗?
编辑:这是上面命令正在执行的操作的示例:
$ env
TEST1_PASSWORD=Hello
TEST2_PASSWORD=World
$ # run command from above
$ env
TEST1_PASSWORD=Hello
TEST2_PASSWORD=World
TEST1_PASSWORD_B64=SGVsbG8=
TEST2_PASSWORD_B64=V29ybGQ=
这似乎有效...
#!/bin/sh
set |while read line; do
k=`echo $line|cut -d"=" -f1`;
v=`echo $line|cut -d"=" -f2`;
t=`echo $k|grep PASSWORD$`;
if [ $t ]; then
export ${k}_B64=`echo $v|base64`;
echo export ${k}_B64=`echo $v|base64`;
fi;
done