在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
答案 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]}