我有一个环境配置文件,我已经定义了环境变量。我使用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等?
答案 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}