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=******
$
我最近正在编写 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=******
$