案例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 [即总是最后一个参数,因为我不知道用户从命令行传递了多少参数]
我必须做什么?
答案 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”。