Shell脚本echo {$ 1 .. $ 2}

时间:2015-10-31 15:44:49

标签: shell

#!/bin/sh
if [ $1+$2 -eq 1 ]
then : ;
else echo {$1..$2}
fi

大家好, 得到这个代码,它应该做:从arg1写入数字到arg2($ 1 = 3,$ 2 = 6然后输出3 4 5 6)如果args是0和1或0和1它应该什么也不做但实际上有错误和糟糕的输出:

./kek1.sh: 2: [: Illegal number: 1+2
{1..2}
谁知道什么是错的?

谢谢。

1 个答案:

答案 0 :(得分: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

如果可用,您可以使用seq命令而不是while循环:

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