2015-10-31 61 views
0
#!/bin/sh 
if [ $1+$2 -eq 1 ] 
then : ; 
else echo {$1..$2} 
fi 

你好球员, 得到这个代码,它应该做的:从ARG1写数字到arg2的($ 1 = 3,$ 2 = 6然后3 4 5 6应输出)如果ARG游戏0和1或0和1,应该做什么,但实际上得到错误和坏输出:

./kek1.sh: 2: [: Illegal number: 1+2 
{1..2} 

人知道什么是错?

谢谢。

+0

的[我如何遍历各种可能的重复通过在bash变量定义号码?](http://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash) – l0b0

回答

0

这里有几个问题:

  • 数学必须是一个算术表达式$((...))
  • {...}内部进行不/bin/sh支持。
  • 实际上不是一个问题,但你可以否定if条件,避免使用else条款。

一个正确的解决办法是

if ! [ $(($1 + $2)) -eq 1 ]; then 
    printf "$1" 
    i=$1 
    while [ "$i" -lt "$2" ]; do 
     i=$((i+1)) 
     printf " %d" "$i" 
    done 
fi 

如果有的话,你可以用它代替了while循环的seq命令:

if ! [ $(($1 + $2)) -eq 1 ]; then 
    seq "$1" "$2" 
fi