请说明为什么在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
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}
for
{1..99}
{1 to 99}
if
left
right
whitespace
ne
neq
toe950272#
不太清楚为什么没有人包括它,但这对我来说很有效,比其他“for”解决方案简单:
for (( i = 1; i < 100; i=i+2 )); do echo $i ; done
roejwanj3#
seq 1 99 | sed -n 'p;n'
使用GNU seq,请归功于gniourf-gniourf
seq
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
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
kkih6yb85#
将{1 to 99}替换为{1..99}。
t30tvxxf6#
for (( i=1; i<=100; i++ )) do ((b = $i % 2)) if [ $b -ne 0 ] then echo $i fi done
nkoocmlb7#
for i in {1..99} do rem=`expr $i % 2` if [ $rem == 1 ] then echo "$i" fi done
w6lpcovy8#
for i in {0..49} do echo $(($i*2+1)) done
8条答案
按热度按时间xbp102n01#
这是一个工作示例:
1.使用的
for
循环在最小和最大数量方面存在排印错误,应为{1..99}
而不是{1 to 99}
if
语句的括号需要在left
和right
侧用whitespace
字符分隔1.使用
ne
而不是neq
、see this reference进行比较。如前所述,如果需要对错误进行一些澄清,可以使用this shell checker。
toe950272#
不太清楚为什么没有人包括它,但这对我来说很有效,比其他“for”解决方案简单:
roejwanj3#
打印1到99之间的奇数
使用GNU
seq
,请归功于gniourf-gniourf示例
如果反转它将打印偶数
vlf7wbxs4#
一个衬垫:
或打印成簇。
同样,要仅打印偶数:
或
kkih6yb85#
将
{1 to 99}
替换为{1..99}
。t30tvxxf6#
nkoocmlb7#
w6lpcovy8#