加入2个变量,每个变量指向不同的东西

时间:2012-08-13 12:13:25

标签: bash shell variables

我想做一个'for'循环,其中两个变量将被连接。这是情况

初始变量集,每个变量都指向一个文件:

weather_sunny=/home/me/foo
weather_rainy/home/me/bar
weather_cloudy=/home/me/sth

第二组变量:

sunny
rainy
cloudy

现在,我想做这样的事情......

for today in sunny rainy cloudy ; do
    cat ${weather_$today}
done

但我没有成功获取初始变量的内容。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:4)

您可以轻松获取变量的名称:

for today in ${!weather_*}; do
    echo cat "${!today}"
done
cat /home/me/foo
cat /home/me/bar
cat /home/me/sth

但是如果您使用的是bash 4+,则可以使用关联数组。在bash 4中,

$ declare -A weather
$ weather['sunny']=/home/me/sth
$ weather['humid']=/home/me/oth
$ for today in "${!weather[@]}"; do echo "${weather[$today]}"; done
/home/me/sth
/home/me/oth

答案 1 :(得分:2)

for today in sunny rainy cloudy ; do
  eval e="\$weather_$today"
  cat $e
done

答案 2 :(得分:1)

使用临时变量,然后使用间接扩展(由!字符引入)。

for today in sunny rainy cloudy ; do
  tmp="weather_$today"
  cat ${!tmp}
done

我不知道怎么留在一条线内。