【问题标题】:Echo value from reassigned variable in linux来自linux中重新分配的变量的回显值
【发布时间】:2015-01-14 05:45:21
【问题描述】:

我正在新编写一个 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=$1"_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 字符串。

但我期待这个SIT_SERVER_IP 的conf 文件的价值。

【问题讨论】:

  • 请不要使您的问题的答案无效。
  • 能不能先把echo $SIT_SERVER_IPecho $SIT_SERVER_PASSWORD的输出显示出来或者举个例子,可以帮我写一些测试脚本
  • 请显示您的配置文件的缩写版本。
  • 用配置内容更新问题
  • 这些SIT_SERVER_IPSIT_SERVER_PASSWORD 是否被导出?

标签: linux bash


【解决方案1】:

我认为您正在寻找间接扩展(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="${1}_SERVER_IP"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

environment_name="${1}_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="${1}_SERVER_IP"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

environment_name="${1}_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,它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
相关资源
最近更新 更多