{100..1..$step}
并没有像你想象的那样做。
来自 bash 手册页:
将命令行拆分为单词后进行扩展。执行的扩展有七种:大括号扩展、波形符扩展、参数和变量扩展、命令替换、算术扩展、分词和路径名扩展。
展开的顺序是:大括号展开;波形符扩展、参数和变量扩展、算术扩展和命令替换(以从左到右的方式完成);分词;和路径名扩展。
请注意,大括号扩展发生在参数扩展之前。
字符的文字序列 $step
不是有效的数字(增量),因此大括号扩展失败。考虑:
$ step=1
$ echo "preamble"{10..1..$step}
preamble{10..1..1}
$