【问题标题】:Resolve variable from config-file based on output根据输出从配置文件中解析变量
【发布时间】:2018-05-29 18:18:40
【问题描述】:

我有一个 shell 脚本,它包含两个文件,一个 bash 文件 (main.sh) 和一个包含我所有配置变量的文件 (vars.config)。

vars.config

domains=("something.com" "else.something.com")

something_com_key="key-to-something"
else_something_com_key="key-to-something else"

在我的代码中,我想遍历域数组并获取域的密钥。

#!/usr/bin/env sh
source ./vars.config
key="_key"
for i in ${domains[@]}; 
do
    base="$(echo $i | tr . _)" # this swaps out . to _ to match the vars
    let farmid=$base$key 
    echo $farmid
done

所以当我运行它时,我会收到一条错误消息

./main.sh:第 13 行:let:key-to-something:语法错误:操作数 预期(错误标记是“key-to-something”)

所以它实际上把它换掉了,但我不能把它保存到一个变量中。

【问题讨论】:

  • 如果你只是想分配一个变量,你不能只做farmid="$base$key"吗?即删除let
  • 您可以切换vars.config 以将所有内容存储在一个关联数组中吗? declare -A domains=([something.com]='key-to-something' [else.something.com]='key-to-something-else')
  • - 如果我删除 let,farmid 将被存储为“something_com_key”,而不是配置中定义的 something_com_key 的值。 @RobertSeaman - 我还有其他变量我想做同样的事情。比如 something_com_id、something_com_user。

标签: linux bash shell unix


【解决方案1】:

您可以使用${!var_name} 将变量扩展为其值的值,例如在您的代码中您可以这样做:

key="_key"
for i in ${domains[@]};
do
    base="$(echo $i | tr . _)" # this swaps out . to _ to match the vars
    farmid=$base$key
    farmvalue=${!farmid}
    echo $farmvalue
done

【讨论】:

  • 完美运行!谢谢!
猜你喜欢
  • 2013-05-10
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多