我必须检查特定参数是否可以说“java8”存在于我的脚本的 shell 参数中,如果存在则删除它。我还希望它存储在其他变量中,但希望将其从我的 $*.
一个选项我尝试使用 getopts 检查 arg 是否存在,但我不知道如何删除参数。
请注意 - 用于检查 'java8' 的 arg 位置未知 我可以在任何地方
while getopts "f:" flag
do
case $flag in
f)
echo $OPTARG
;;
esac
done
echo $*
~
所以基本上当我调用 -
./test.sh arg1 arg2 -f java8 arg3
执行 getopts 块后,剩余的 args 将是
参数 1、参数 2、参数 3
对于任何 POSIX shell(不使用临时数组):从位置参数列表中删除任何
-f
后跟java8
或 的实例-fjava8
,同时计算此类删除的选项的数量 - 变量中的参数found
。上述循环的迭代频率与位置参数的初始数量一样多。
如果第一个位置参数为
-f
,则测试第二个位置参数是否为java8
。如果测试为true,那么我们需要跳过这两个参数,因此skip
计数器设置为 2。我们还递增found
以表明我们又找到了一个-f java8
.如果第一个位置参数是
-fjava8
,那么我们需要跳过这个单个参数,因此skip
计数器设置为 1。我们还增加found
以指示我们已经找到了一个-fjava8
(与 find 相同-f java8
)的实例。在声明之后,除了递减计数器并关闭第一个位置参数(如果非零)
case
之外,我们不做任何事情。如果为零,我们在调用之前将第一个位置参数移动到列表的末尾,有效地允许我们保留的参数在列表中循环返回,同时删除不需要的参数。skip
shift
skip
skip
shift
由于我们以循环方式使用位置参数列表,因此如果是最后一个参数
-f
并且第一个参数是,我们将丢失它java8
。这是最后一条if
语句所要防止的。也许是这样的?我假设你想删除
-f java8
...示例用法: