我想将所有参数从shell脚本传递给另一个命令,除非其中一个参数是a --
,在这种情况下,我想--
在脚本中使用之前的参数,而仅在之后传递参数--
。
例如,如果我的脚本是foo.sh
:
./foo.sh -a bar -p qux -- --recursive -p 8080
我想用-a
和第一-p
参数在我的剧本,并通过对--recursive
和第二-p
。
我的最初想法是首先遍历每个参数,直到--
找到a,然后使用shift
提取所需的参数,然后使用将其余的参数传递给另一个命令$@
,但是我希望有一种更优雅的方法来做到这一点。
附带说明,我目前正在使用getopts
提取参数,因此与之配合使用的解决方案将是最佳选择。
不确定这是您想要的,摘自GNU手册的简化示例。
#!/bin/bash
aflag=
bflag=
cflag=
dflag=
while getopts abcd name
do
case $name in
a) aflag=1;;
b) bflag=1;;
c) cflag=1;;
d) dflag=1;;
esac
done
shift $(($OPTIND - 1))
printf "Remaining arguments are: %s\n" "$*"
结果
$ ./test.sh -a -b -- -c -d
Remaining arguments are: -c -d
手册相关部分的完整性
每次调用它时,getopts实用程序都应将下一个选项的值放在由名称操作数指定的shell变量中,并将要处理的下一个参数的索引放入shell变量OPTIND中。每当调用该shell时,OPTIND都应初始化为1。
[...]
当遇到选项的结尾时,getopts实用程序将以大于零的返回值退出;否则,返回0。外壳程序变量OPTIND应设置为第一个非选项参数的索引,如果前面没有其他非选项参数,则将第一个“-”参数视为选项参数,或者如果没有非选项参数,则值“ $#” + 1;名称变量应设置为问号字符。以下任何一项均应标识选项的结尾:特殊选项“-”,查找不以“-”开头的自变量或遇到错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句