无法为变量设置倒数第二个命令行参数

时间:2013-05-13 17:06:45

标签: bash shell command-line

无论传递给我的脚本的参数数量多少,我希望第二个到最后一个参数始终代表我的代码中的特定变量。

执行程序我输入的内容如下:

sh myprogram.sh -a arg_a -b arg_b special specific

test=("${3}")
echo $test

结果将显示“特殊”。因此,如果我尝试这个,那就使用相同的想法(因为我不知道那些参数):

secondToLastArg=$(($#-1))
echo $secondToLastArg

结果将显示'3'。如何动态分配倒数第二个参数?

2 个答案:

答案 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))}`