从另一个变量的内容中获取变量的内容,两个变量名都具有相同的尾随数

时间:2013-01-12 09:33:33

标签: linux bash variables

在bash脚本中,如何从另一个变量的内容中获取变量的内容,两个变量名都具有相同的尾随数?

IP1=192.168.0.17
DIR1=/mnt/2tb/archive/src/
IP2=192.168.0.11
DIR2=~/src/
IP3=192.168.0.113
DIR3=~/src/

#get local ip and set variable HOST to local ip
HOST=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}')

# get HOST source DIR as variable from ip and preset variables

echo $HOSTDIR

3 个答案:

答案 0 :(得分:1)

您可以使用如下所示的eval:

HOSTDIR=$(for i in {1..3}; do eval if [[ \$IP$i == "$HOST" ]] \; then echo \$DIR$i \; fi; done)

但是在另一个解决方案中建议使用关联数组是一个更好的主意。

答案 1 :(得分:0)

如果只有3,请使用if语句

if [ $HOST = $IP1 ]; then
    HOSTDIR=$DIR1
elif [ $HOST = $IP2 ]; then
    HOSTDIR=$DIR2
...

另一种方法是使用间接扩展:

for num in 1 2 3 4 5 6 7 8 9 10
do
    ip=IP$num
    MYIP=${!ip}
    if [ $HOST = $MYIP ]; then
        dir=DIR$num
        HOSTDIR=${!dir}
        break
    fi
done

答案 2 :(得分:0)

您可以使用关联数组执行此操作。

以下是如何使用它们的示例:

#! /bin/bash

typeset -A dirs           # -A for associative array, -a for indexed arrays

dirs["192.168.0.17"]=foo  # build your map of ip -> dirs
dirs["192.168.0.18"]=bar

ip=192.168.0.17
echo ${dirs[$ip]}         # print the value associated with $ip
ip=192.168.0.18
echo ${dirs[$ip]}