bash脚本从var $ [id]形式的变量中获取值

时间:2012-04-19 07:45:32

标签: bash shell

这是我第一次使用shell脚本(#!/ bin / sh)并且我一直在阅读教程之类的工作,但我坚持阅读和写一个键的值..

我试图从

形式的配置文件中读取key = value对
key1_begin=abc
key1_end=def

key2_begin=123
key2_end=jkl

.. and so on

我希望用户将参数传递给脚本,如

something.sh 1 x y z

其中第一个参数用作修改相应键的参数。因此,在检查目录存在且文件存在后,我使用

来源它
source config.cfg

然后我使用ID = $ 1保存id并使用

访问密钥
echo key${ID}_begin 

所以获取密钥值的读取将是

echo key${ID}_begin = $[key${ID}_begin]

我期望获得“key1_begin = abc”,而是继续获得“key1_begin = 0”。然而,相同的命令似乎适用于数字。例如,使用ID为2的此命令会给出“key2_begin = 123”

有人可以指出我正确的方向,为什么这对数字而不是字母表有效?

我用什么来改变变量的值?我目前正在使用“eval”,但这似乎只适用于数字

[ ! -z $2 ] && eval key${ID}_end=$3

非常感谢任何建议/指点。\

谢谢

2 个答案:

答案 0 :(得分:0)

你很可能不得不使用中间变量:

key1_begin=abc
var="key${ID}_begin"
echo "$var=${!var}"

答案 1 :(得分:0)

正如此(假设bash):

#! /bin/sh
ID=2
source mychild.sh
keyid="key${ID}_begin"
echo "key${ID}_begin = ${!keyid}"

简而言之,在bash中,你可以

var=${!i}

或其他炮弹:

var=`eval echo \$$i`