Bash

為什麼這個 for 循環會忽略我的變數?

  • December 5, 2018

我正在嘗試做一個簡單的腳本,它執行幾個命令 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

誰能解釋為什麼會發生這種情況以及我需要做些什麼來糾正?或者有人有更好的方法嗎?

只是一組 - 或多或少安全 - 並且可能是眾所周知的方法:

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

引用自:https://unix.stackexchange.com/questions/485941