无论传递给我的脚本的参数数量多少,我希望第二个到最后一个参数始终代表我的代码中的特定变量。
执行程序我输入的内容如下:
sh myprogram.sh -a arg_a -b arg_b special specific
test=("${3}")
echo $test
结果将显示“特殊”。因此,如果我尝试这个,那就使用相同的想法(因为我不知道那些参数):
secondToLastArg=$(($#-1))
echo $secondToLastArg
结果将显示'3'。如何动态分配倒数第二个参数?
答案 0 :(得分:3)
您需要一些数学来获得所需的数字($(($#-1))
),然后使用间接(${!n}
)来获得实际参数。
$ set -- a b c
$ echo $@
a b c
$ n=$(($#-1))
$ echo $n
2
$ echo ${!n}
b
$
间接(${!n}
)告诉bash使用n
的值作为要使用的变量的名称(在这种情况下为$2
)。
答案 1 :(得分:2)
你可以使用$ @作为数组&阵列斩波方法:
echo ${@:$(($#-1)):1}
这意味着,从1
...
$(($#-1))
元素
如果某些旧版本的shell不支持${array:start:length}
语法但仅支持${array:start}
语法,请使用以下hack:
echo ${@:$(($#-1))} | { read x y ; echo $x; } # OR
read x unused <<< `echo ${@:$(($#-1))}`