对于Bash中的循环范围

时间:2015-11-11 21:22:58

标签: 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="nprime" || flag="prime"
 break
 done

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

done

执行时,它会抛出一个错误,因为for循环采用花括号中提到的序列,因为它不是一个序列。 你能指导我哪里出错吗?

2 个答案:

答案 0 :(得分:2)

我的版本中的

man bash说:

  

序列表达式采用{x..y[..incr]}形式,其中xy是整数或单个字符,incr是可选的增量,是整数。 / p>

您无法在范围内使用变量。请尝试seq

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

请注意incr的{​​{1}}介于seqx之间。

答案 1 :(得分:2)

使用:

for ((i=2; i<=$num; i++))