Bash中的For循环范围
我正在尝试用bash中的代码生成质数,如下所示: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
#!/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展开顺序发生在参数展开之前。