1

2 つの変数が結合される「for」ループを実行したいと考えています。状況はこちら

それぞれがファイルを指す変数の初期セット:

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

変数の 2 番目のセット:

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 以降を使用している場合は、連想配列を使用できます。バッシュ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

ただし、1行以内にとどまる方法がわかりません。

于 2012-08-13T12:26:05.937 に答える