请告诉我们为什么在bash脚本中使用以下代码打印奇数会导致错误:
第3行:{1%2:语法错误:操作数预期(错误令牌为“{1%2”)
for i in {1 to 99}
do
rem=$(( $i % 2 ))
if [$rem -neq 0];
then
echo $i
fi
done
答案 0 :(得分:19)
这是一个有效的例子:
for i in {1..99}
do
rem=$(($i % 2))
if [ "$rem" -ne "0" ]; then
echo $i
fi
done
for
循环的最小和最大数量应为拼写错误,应为{1..99}
而不是{1 to 99}
if
语句的括号需要与whitespace
和left
一侧的right
字符分隔ne
代替neq
,see this reference进行比较。如前所述,如果您需要澄清错误,可以使用this shell checker。
答案 1 :(得分:3)
seq 1 99 | sed -n 'p;n'
使用GNU seq
,可归功于gniourf-gniourf
seq 1 2 99
$ seq 1 10 | sed -n 'p;n'
1
3
5
7
9
$ seq 1 10 | sed -n 'n;p'
2
4
6
8
10
答案 2 :(得分:1)
将{1 to 99}
替换为{1..99}
。
答案 3 :(得分:0)
for (( i=1; i<=100; i++ ))
do
((b = $i % 2))
if [ $b -ne 0 ]
then
echo $i
fi
done
答案 4 :(得分:0)
不太确定为什么没有人包含它,但这对我有用,并且比其他“ for”解决方案更简单:
for (( i = 1; i < 10; i=i+2 )); do echo $i ; done
答案 5 :(得分:0)
for i in {1..99}
do
rem=`expr $i % 2`
if [ $rem == 1 ]
then
echo "$i"
fi
done