我想做一个'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
但我没有成功获取初始变量的内容。我怎样才能做到这一点?
答案 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
我不知道怎么留在一条线内。