Bash在$@中最后一个参数之前获取所有命令行参数

时间:2020-01-09 10:42:02  来源:igfitidea点击:

我正在编写一个包装器bash shell脚本,该脚本将从命令行将最后一个参数(域名)获取到名为$_domain的shell变量中。
如何在$@中的最后一个参数之前找到所有其他参数,并将其存储在名为$allargs的shell变量中。
这样我就可以像下面这样传递它们:

/path/to/real/binary $allargs $_domain

我如何在Unix之类的操作系统下使用bash shell做到这一点?
您可以将所有命令行参数或者参数存储在bash数组中,如下所示:

array=( $@ )

首先,您需要找出数组的长度:

len=${#array[@]}

接下来,从数组(即$@存储在数组中)获取最后一个命令行参数:

_domain=${array[$len-1]}

最后,提取所有命令行参数并将其存储在$@中最后一个参数之前:

args=${array[@]:0:$len-1}

放在一起:

#!/bin/bash
array=( $@ )
len=${#array[@]}
_domain=${array[$len-1]}
_args=${array[@]:0:$len-1}
 
echo "Domain: $_domain"
echo "All Args before $_domain are: $_args"

如下运行:

./script -p -y --zzz theitroad.local

输出示例:

Domain: theitroad.local
All Args before theitroad.local are: -p -y --zzz

另一个示例运行:

$ ./script -p -y --zzz --delete theitroad.local

输出示例:

Domain: theitroad.local
All Args before theitroad.local are: -p -y --zzz --delete