1

在 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
4

3 回答 3

1

您可以使用 eval 如下:

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

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

于 2013-01-12T09:59:11.553 回答
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
于 2013-01-12T09:37:46.213 回答
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]}
于 2013-01-12T09:42:25.187 回答