获取shell脚本的最后一个参数

时间:2013-10-30 09:13:45

标签: linux bash shell unix

案例1: 假设我将一些参数传递给我的shell脚本,如下所示:

./myshell_script a b c d 

如果我运行echo $#,我会从命令行给出一些参数,并将其存储在一个变量中[因为我不知道用户传递的参数数量]:

var1 = `echo "$#"`

案例2: 4美元给了我最后一个参数的名字。

如果我希望它存储在

var2然后

var2 = $4 

我的问题是:

如果我想存储值,我会直接从var1到var2,在shell脚本中怎么可能?

代表:

./myshell_script.sh a b c

var1 = `echo "$#"` ie var1 = 3

现在我想要

var2 = c [即总是最后一个参数,因为我不知道用户从命令行传递了多少参数]

我必须做什么?

4 个答案:

答案 0 :(得分:8)

下面的脚本显示了如何获取传递给脚本的第一个和最后一个参数:

numArgs="$#"
echo "Number of args: $numArgs"

firstArg="$1"
echo "First arg: $firstArg"

lastArg="${!#}"
echo "Last arg: $lastArg"

输出:

$ ./myshell_script.sh a b c d e f
Number of args: 6
First arg: a
Last arg: f

答案 1 :(得分:5)

为此,您可以使用:

${@: -1}

测试

$ cat a
#!/bin/bash

echo "passed $# parameters, last being --> ${@: -1}"

$ ./a a b c d
passed 4 parameters, last being --> d
$ ./a a b c d e f g
passed 7 parameters, last being --> g

答案 2 :(得分:3)

引用here的方式:

for last; do : ; done
echo "${last}"

传递给脚本的最后一个参数将存储在变量last

正如链接中所提到的,这适用于兼容POSIX的shell,它适用于任意数量的参数。


顺便说一句,我怀疑你的剧本是否按照你在问题中所写的方式运作:

var1 = `echo "$#"`

您需要删除=周围的空格,即:

var1=`echo "$#"`

var1=$(echo "$#")

答案 3 :(得分:-1)

重新组织参数可能会更好。而不是可变数量的参数后跟一个特定的最终参数,将最后一个参数放在第一位(这样它是$1),并在此之后放入变量数量的参数。而不是

myshell_script a b c d

最终将var2设置为“d”,请使用

var2=$1; shift

并调用

myshell_script d a b c

现在var2的值为“d”,而$@(移位后)将包含“a”,“b”和“c”。