shell Bash语法错误,如:应为操作数(错误标记为“{1% 2“)'

wmtdaxz3  于 2022-11-25  发布在  Shell
关注(0)|答案(8)|浏览(110)

请说明为什么在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
xbp102n0

xbp102n01#

这是一个工作示例:

for i in {1..99}
do
        rem=$(($i % 2))
        if [ "$rem" -ne "0" ]; then
                echo $i
        fi
done

1.使用的for循环在最小和最大数量方面存在排印错误,应为{1..99}而不是{1 to 99}

  1. if语句的括号需要在leftright侧用whitespace字符分隔
    1.使用ne而不是neqsee this reference进行比较。
    如前所述,如果需要对错误进行一些澄清,可以使用this shell checker
toe95027

toe950272#

不太清楚为什么没有人包括它,但这对我来说很有效,比其他“for”解决方案简单:

for (( i = 1; i < 100; i=i+2 )); do echo $i ; done
roejwanj

roejwanj3#

打印1到99之间的奇数

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
vlf7wbxs

vlf7wbxs4#

一个衬垫:

for odd in {1..99..2}; do echo "${odd}"; done

或打印成簇。

for odd in {1..99..2}; do echo -n " ${odd} "; done

同样,要仅打印偶数:

for even in {2..100..2}; do echo "${even}"; done

for even in {2..100..2}; do echo -n " ${even} "; done
kkih6yb8

kkih6yb85#

{1 to 99}替换为{1..99}

t30tvxxf

t30tvxxf6#

for (( i=1; i<=100; i++ ))
do
    ((b = $i % 2))
  if [ $b -ne 0 ] 
    then
    echo $i
fi
done
nkoocmlb

nkoocmlb7#

for i in {1..99}
do
    rem=`expr $i % 2`
    if [ $rem == 1 ]
    then
        echo  "$i"
    fi
done
w6lpcovy

w6lpcovy8#

for i in {0..49}
do
 echo $(($i*2+1))
done

相关问题