Bash中的For循环范围

Bash中的For循环范围,bash,Bash,我正在尝试用bash中的代码生成质数,如下所示: #!/bin/bash echo "Enter till where u wish to generate" read num echo "Generating prime numbers from 2 to $num" flag="prime" for i in {2..$num} do for j in {2..$((${num}-1))} do [ $((${i}%${j})) -eq 0 ] && flag

我正在尝试用bash中的代码生成质数,如下所示:

#!/bin/bash


echo "Enter till where u wish to generate"
read num
echo "Generating prime numbers from 2 to $num"

flag="prime"

for i in {2..$num}
do

for j in {2..$((${num}-1))}
 do

 [ $((${i}%${j})) -eq 0 ] && flag="nprime" || flag="prime"
 break
 done

 [ "$flag" == "prime" ] && echo "$i"

done
执行时,它会抛出一个错误,因为for循环采用大括号中提到的序列,因为它不是序列。
你能告诉我哪里出了问题吗?

manbash
在我的版本中说:

序列表达式的形式为
{x..y[…incr]}
,其中
x
y
为整数或单个字符,
incr
(可选增量)为整数

不能在范围中使用变量。请尝试以下操作:

for i in $(seq 2 $num) ; do

请注意,在我的版本中,
seq的
incr
介于
x
y

之间,表示:

序列表达式的形式为
{x..y[…incr]}
,其中
x
y
为整数或单个字符,
incr
(可选增量)为整数

不能在范围中使用变量。请尝试以下操作:

for i in $(seq 2 $num) ; do
请注意,
incr
对于
seq
x
y
之间使用:

for ((i=2; i<=$num; i++))
对于((i=2;i使用:


for((i=2;我谢谢你!seq似乎是一个更好的方法!原因是--brake展开顺序发生在参数展开之前。谢谢!seq似乎是一个更好的方法!原因是--brake展开顺序发生在参数展开之前。