shell脚本:获取指定的参数范围
如果谷歌不工作,我通常会来这里。所以这次是这样的: 在函数中,我想从第4个输入参数开始赋值给变量。 例如:shell脚本:获取指定的参数范围,shell,Shell,如果谷歌不工作,我通常会来这里。所以这次是这样的: 在函数中,我想从第4个输入参数开始赋值给变量。 例如: function foo { var="$4$5$6..." use var commands using $1, etc } 所以我想我不能使用shift,因为我想在之后使用$1。我也不想使用额外的var来存储$1、$2、$3和shift。那么它应该如何工作呢?有人想要一个没有巴西主义的版本?好吧,但你不会喜欢的 function foo { va
function foo {
var="$4$5$6..."
use var
commands using $1, etc
}
所以我想我不能使用shift,因为我想在之后使用$1。我也不想使用额外的var来存储$1、$2、$3和shift。那么它应该如何工作呢?有人想要一个没有巴西主义的版本?好吧,但你不会喜欢的
function foo {
var=${@:4}
# ...
}
#!/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
我用dash和FreeBSD的sh对此进行了测试,但我不能真正保证评估的可移植性。我还必须将其限制在参数$1到$9之间,因为在这之后它将停止工作。此外,Alex回答:
除最后一个之外的所有参数:
var=${@:1:${#}-1}
最后一个论点:
var=${@:${#}}
or POSIX:
eval var=\${{#}}
“我既不想使用额外的var来存储$1、$2、$3和shift”。坏主意。这个怎么了?这就是外壳的工作原理。为什么要拒绝简单、明显、正确的解决方案呢?对于“jamessan”:$1等出现在我需要的地方后面,而$1等仅在以后使用一次。因此,我试图省去显式存储它们的工作量。(假设在本例中不是4,而是10,那么我需要存储9次。)