如何在Shell脚本中使用环境变量名中的变量?

时间:2012-07-27 03:53:51

标签: shell

我有一个环境配置文件,我已经定义了环境变量。我使用source在shell脚本(bash)中获取这些变量。

我在shell脚本中使用checkout命令检查环境变量中定义的位置的文件。现在我需要使用多个位置来检查文件,这些文件可以是任何数字,用于不同的shell脚本运行。

例如。用户在配置文件中提供两个路径PATH1和PATH2,并且NUM_OF_PATHS为2。

在我的shell脚本中,我想做一些类似于使用路径的内容。

i=0
echo ${NUM_OF_PATHS}
while [ $i -lt ${NUM_OF_PATHS} ]
do
    checkout $PATH{$i}
    i=`expr $i + 1`
done

如何使用变量i形成环境变量PATH1或PATH2等?

4 个答案:

答案 0 :(得分:5)

i=1
while [ $i -le ${NUM_OF_PATHS} ]
do
  CPATH=$(eval echo \$\{PATH$i\})
  echo "PATH$i: $CPATH"
  let i++ 
done

eval组合并评估其参数并执行组合表达式。这里,eval执行:echo ${PATH1}。为了做到这一点,我们首先转义${...},以便echo可以在eval之后接收它们。在$之前,唯一未转义的特殊字符为i。 eval扩展了这个并剥离了转义的字符并使用结果执行echo。

因此,CPATH=$(eval echo \$\{PATH$i\})变为CPATH=$(echo ${PATH1}),CPATH获得回声输出。

答案 1 :(得分:0)

这是一个完整的例子,我认为会做你想要的。以下是我原来的消息,由于我不完全理解的原因而被投票:

$ cat test.sh
function checkout() {
    echo "Registering $1"
}

PATH1="Path1;/usr/bin"
PATH2="Path2;/bin"
NUM_OF_PATHS=2

i=1
echo $NUM_OF_PATHS
while [ $i -le $NUM_OF_PATHS ]
do
    eval "checkout \$PATH$i"
    i=`expr $i + 1`
done
$ bash test.sh
2
Registering Path1;/usr/bin
Registering Path2;/bin
$

原始讯息 您可以使用“eval”命令。这是一个例子(适用于GNU bash,版本4.2.37(2)-release):

$ A1="Variable 1"
$ A2="Variable 2"
$ for i in {1..2}; do eval "echo \$A$i"; done
Variable 1
Variable 2
$

该字符串将评估为“echo $ A1”和“echo $ A2”,然后eval将执行您想要的操作。

答案 2 :(得分:0)

为什么不使用数组变量?使用一个数组MYPATH []代替多个PATH1 PATH2变量

MYPATH=(
path0
path1
path2
)
MYPATH[3]=path3

NUM_OF_PATHS="${#MYPATH[@]}"
echo ${NUM_OF_PATHS}

for ((i=0; i < NUM_OF_PATHS; i++))
do
    checkout ${MYPATH[$i]}
done

答案 3 :(得分:-2)

在名称周围使用花括号:${PATH$i}