我想将shell脚本中的所有参数传递给另一个命令,除非其中一个参数是a --,在这种情况下我想--在我的脚本之前使用参数,并且只传递参数之后的参数--.
例如,如果我的脚本是foo.sh:
./foo.sh -a bar -p qux -- --recursive -p 8080
Run Code Online (Sandbox Code Playgroud)
我想在我的脚本中使用-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" "$*"
Run Code Online (Sandbox Code Playgroud)
结果
$ ./test.sh -a -b -- -c -d
Remaining arguments are: -c -d
Run Code Online (Sandbox Code Playgroud)
完整性手册的相关部分
每次调用它时,getopts实用程序都应将下一个选项的值放在由name操作数指定的shell变量中,并将下一个参数的索引放在shell变量OPTIND中.每当调用shell时,OPTIND都应初始化为1.
[...]
遇到选项结束时,getopts实用程序将以大于零的返回值退出; shell变量OPTIND应设置为第一个非选项参数的索引,如果在它之前没有出现其他非选项参数,则第一个" - "参数被认为是一个选项参数,或者如果没有非选项参数,则值"$#"+1; name变量应设置为问号字符.以下任何一项都应标识选项的结尾:特殊选项" - ",查找不以" - "开头的参数,或遇到错误.
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |