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
...

もう 1 つのアプローチは、間接展開を使用することです。

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 に答える