linux 中重新分配的变量的回显值

Echo value from reassigned variable in linux

我最近正在编写 bash 脚本。我有一个设置一些变量的配置文件:

environment_information.conf

SIT_SERVER_IP=xxx.xx.xx.xx
SIT_SERVER_PASSWORD=******

我阅读了 conf 文件并尝试使用预定义的键进行回应

echo $SIT_SERVER_IP
echo $SIT_SERVER_PASSWORD

它工作正常,没有任何问题。在我的场景中,我将在执行 shell 脚本时读取这些值。

automation_script.sh

#!/bin/sh
. ./environment_information.conf
environment_name="_SERVER_IP";
# test="${environment_prefix}";  # Error
test="${environment_name}";
echo "$.$test";
echo $SIT_SERVER_IP

我尝试使用输入和一些常数值从 conf 获取值:

$ ./automation_script.sh SIT
$.SIT_SERVER_IP
xxx.xx.xx.xx
$

它总是打印 SIT_SERVER_IP 字符串。

但我希望从 conf 文件中得到这个 SIT_SERVER_IP 的值。

我认为您正在寻找间接扩展(Shell parameter expansion 的第 4 段):

test=${!environment_name}

这扩展为名称保存在 $environment_name 中的变量的值。


概念验证脚本,大致基于您的代码 (automation_script.sh):

: "${1:?}"  # Check that a parameter (SIT) was passed.

#. ./environment_information.conf
SIT_SERVER_IP="192.10.29.31"   # Surrogate for configuration file
SIT_SERVER_PASSWORD="secret"   # Surrogate for configuration file

echo "SIT_SERVER_IP=${SIT_SERVER_IP}"
echo "SIT_SERVER_PASSWORD=${SIT_SERVER_PASSWORD}"

environment_name="_SERVER_IP"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

environment_name="_SERVER_PASSWORD"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

运行 脚本的输出:

$ bash automation_script.sh SIT
SIT_SERVER_IP=192.10.29.31
SIT_SERVER_PASSWORD=secret
SIT_SERVER_IP
SIT_SERVER_IP=192.10.29.31
SIT_SERVER_PASSWORD
SIT_SERVER_PASSWORD=secret
$

使用来自更新问题的 environment_information.conf 文件:

: "${1:?}"

. ./environment_information.conf
#SIT_SERVER_IP="192.10.29.31"
#SIT_SERVER_PASSWORD="secret"

echo "SIT_SERVER_IP=${SIT_SERVER_IP}"
echo "SIT_SERVER_PASSWORD=${SIT_SERVER_PASSWORD}"

environment_name="_SERVER_IP"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

environment_name="_SERVER_PASSWORD"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

运行 产生:

$ bash automation_script.sh SIT
SIT_SERVER_IP=xxx.xx.xx.xx
SIT_SERVER_PASSWORD=******
SIT_SERVER_IP
SIT_SERVER_IP=xxx.xx.xx.xx
SIT_SERVER_PASSWORD
SIT_SERVER_PASSWORD=******
$