1

我想做一个“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

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

4

3 回答 3

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
于 2012-08-13T12:21:21.743 回答
2
for today in sunny rainy cloudy ; do
  eval e="\$weather_$today"
  cat $e
done
于 2012-08-13T12:25:30.390 回答
1

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

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

我不知道如何保持在一条线上。

于 2012-08-13T12:26:05.937 回答