このforループが私の変数を無視するのはなぜですか? [コピー]

このforループが私の変数を無視するのはなぜですか? [コピー]

ユーザー入力に応じて複数のコマンドをN回実行する簡単なスクリプトを作成しようとしています。ただし、forループでコマンドを実行すると、変数は無視されます。

read -p "Please enter the number of times you wish to fail over: " num

...

  for run in {1..$num}
   do echo "STOP: "
   date
   systemctl stop $broker
   date
   sleep $st
   echo "START: "
   date
   systemctl start $broker
   date
   sleep $st
  done
fi
+ '[' y == n ']'
+ '[' y == N ']'
+ for run in '{1..$num}'
+ echo 'STOP: '
STOP:
+ date
Tue Dec  4 16:14:11 GMT 2018

なぜこれが起こるのか、そしてそれを解決するにはどうすればよいのかを説明できますか?それとももっと良い方法がある人はいますか?

答え1

やや安全で、おそらくよく知られている方法のコレクションです。

a=5
eval "for i in {1..$a}; do echo \$i; done"
cat <<< "for i in {1..$a}; do echo \$i; done" | bash
echo "for i in {1..$a}; do echo \$i; done" | bash
for i in $(seq 1 $a); do echo $i; done

関連情報