shell脚本:获取指定范围的参数

时间:2010-10-12 16:43:17

标签: shell

如果google无法正常工作,我通常会来这里。所以这一次是这样的: 在函数中,我想从第4个输入参数向前分配变量。 例如:

function foo {  
  var="$4$5$6..."   
  use var  
  commands using $1, etc  
}

所以我认为我不能使用shift,因为我之后想要使用1美元。我不想使用额外的var来存储$ 1,$ 2,$ 3和shift。那应该怎么做呢?

3 个答案:

答案 0 :(得分:8)

function foo {
    var=${@:4}
    # ...
}

答案 1 :(得分:1)

有人想要一个没有基础的版本吗?好的,但你不会喜欢它。

#!/bin/sh

do_something () {
        i=4
        var=
        while [ $i -lt 10 ] ; do
                tmp=
                eval tmp=\"'$'$i\"
                if [ -z "$tmp" ] ; then
                        break
                else
                        var="$var$tmp"
                fi
                i=$(($i+1))
        done
        echo $var
}

do_something one two three four five six "six and a half" seven eight nine

我用破折号和FreeBSD的sh测试了这个,但我不能真正保证评估事物的可移植性。我还必须将它限制在参数$ 1到$ 9之间,因为之后它就会停止工作。

答案 2 :(得分:0)

此外,Alex回答:

所有参数,但最后一个:

var=${@:1:${#}-1}

最后一个论点:

var=${@:${#}}  

or POSIX:
eval var=\${{#}}