![大括号扩展在脚本中不起作用](https://linux22.com/image/5758/%E5%A4%A7%E6%8B%AC%E5%8F%B7%E6%89%A9%E5%B1%95%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
for i in {1..40}
do
echo $i
done
我有
{1..40}
我想要类似的东西
1
2
3
and so on
i
所以我可以在命令的参数中使用该变量。
答案1
在巴什3.0+(以及 zsh 和 ksh93),{1..40}
将扩展到 1-40(含)的数字。在一个POSIX外壳就像破折号(这是/bin/sh
Ubuntu 中的典型)一样,它不会工作(我们称这个问题为“bashism”)。
在具有 GNU 实用程序的系统上,您可以使用以下命令seq
来完成此操作:
for i in $(seq 1 40)
do
echo $i
done
为了更加便携,您必须$i
在while
循环中手动递增:
i=1
while [ $i -le 40 ]
do
echo $i
i=$((i+1))
done
这个便携式版本也稍微快一些,因为它缺少外部命令。