Bash 使用getopts读取作为最终位置放置的一个可选参数
我编写了一个bash脚本,它采用了灵活数量的参数,现在我想为每个参数添加一个可选参数(Bash 使用getopts读取作为最终位置放置的一个可选参数,bash,arguments,getopts,Bash,Arguments,Getopts,我编写了一个bash脚本,它采用了灵活数量的参数,现在我想为每个参数添加一个可选参数(-l) 我目前很难获得想要的行为 我希望正确执行以下所有操作: ./Script.sh arg1 arg2 arg3 -l opt ./Script.sh arg1 arg2 arg3 ./Script.sh arg1 arg2 arg3 arg4 -l opt ./Script.sh arg1 arg2 arg3 arg4 arg5 问题是无法设置$OPTIND。 如果将-l opt放在第一个参数之前,则
-l
)
我目前很难获得想要的行为
我希望正确执行以下所有操作:
./Script.sh arg1 arg2 arg3 -l opt
./Script.sh arg1 arg2 arg3
./Script.sh arg1 arg2 arg3 arg4 -l opt
./Script.sh arg1 arg2 arg3 arg4 arg5
问题是无法设置$OPTIND
。
如果将-l opt
放在第一个参数之前,则以下循环有效
while getopts ":l:" option
do
case "$option" in
t)
F_NAME=$OPTARG
;;
esac
done
shift $((OPTIND - 1))
但是,将可选的-l
作为最后一个参数是必需的。
实现这一点最简单的方法是什么?
getopts
符合posix标准命令行语法,其中首先是标志选项。所以它不容易用于非标准情况
但是,您可能有getopt(1)
(请参见man1getopt
)的Gnu实现,它可以处理置换选项标志以及长选项。然而,作为一个界面,它并不是那么容易
或者你可以自己解释这个论点
for ((i=1; i<=$#; ++i)); do
if [[ ${!i} == "-l" ]]; then
((++i))
OPT_L=${!i}
else
# handle the argument (in "${!i]")
fi
done
for((i=1;igetopts
符合posix标准命令行语法,其中首先是标志选项。因此,对于非标准情况,使用它并不容易
但是,您可能有getopt(1)
(请参见man1getopt
)的Gnu实现,它可以处理置换选项标志以及长选项。但是,它不是一个简单的接口
或者你可以自己解释这个论点
for ((i=1; i<=$#; ++i)); do
if [[ ${!i} == "-l" ]]; then
((++i))
OPT_L=${!i}
else
# handle the argument (in "${!i]")
fi
done
for((i=1;igetopts
符合posix标准命令行语法,其中首先是标志选项。因此,对于非标准情况,使用它并不容易
但是,您可能有getopt(1)
(请参见man1getopt
)的Gnu实现,它可以处理置换选项标志以及长选项。但是,它不是一个简单的接口
或者你可以自己解释这个论点
for ((i=1; i<=$#; ++i)); do
if [[ ${!i} == "-l" ]]; then
((++i))
OPT_L=${!i}
else
# handle the argument (in "${!i]")
fi
done
for((i=1;igetopts
符合posix标准命令行语法,其中首先是标志选项。因此,对于非标准情况,使用它并不容易
但是,您可能有getopt(1)
(请参见man1getopt
)的Gnu实现,它可以处理置换选项标志以及长选项。但是,它不是一个简单的接口
或者你可以自己解释这个论点
for ((i=1; i<=$#; ++i)); do
if [[ ${!i} == "-l" ]]; then
((++i))
OPT_L=${!i}
else
# handle the argument (in "${!i]")
fi
done
for((i=1;i我发现了一个技巧,可以在getopts中使用带有可选参数的参数
Jan Schampera在bash-hackers.org上的回复中给出了管理可选参数在命令中的情况的方法:
(请参阅:本页的最深处)
但它不管理在命令末尾给出选项的情况
在这种情况下,这被认为是错误的,因为没有给出参数,getopts
将opt
变量设置为“:”(冒号),并将OPTARG
设置为故障选项值。
因此,我们必须使用案例$OPTARG
来管理“:”案例
假设我们编写的脚本有三个选项:
a
:无参数
b
:带有必需的参数
v
:使用0
到2
之间的值设置详细度。默认值为0
,在使用-v
调用脚本时使用预设值,无参数或使用错误值
代码如下:
我发现了一个技巧,可以在getopts中使用带有可选参数的参数
Jan Schampera在bash-hackers.org上的回复中给出了管理可选参数在命令中的情况的方法:
(请参阅:本页的最深处)
但它不管理在命令末尾给出选项的情况
在这种情况下,这被认为是错误的,因为没有给出参数,getopts
将opt
变量设置为“:”(冒号),并将OPTARG
设置为故障选项值。
因此,我们必须使用案例$OPTARG
来管理“:”案例
假设我们编写的脚本有三个选项:
a
:无参数
b
:带有必需的参数
v
:使用0
到2
之间的值设置详细度。默认值为0
,在使用-v
调用脚本时使用预设值,无参数或使用错误值
代码如下:
我发现了一个技巧,可以在getopts中使用带有可选参数的参数
Jan Schampera在bash-hackers.org上的回复中给出了管理可选参数在命令中的情况的方法:
(请参阅:本页的最深处)
但它不管理在命令末尾给出选项的情况
在这种情况下,这被认为是错误的,因为没有给出参数,getopts
将opt
变量设置为“:”(冒号),并将OPTARG
设置为故障选项值。
因此,我们必须使用案例$OPTARG
来管理“:”案例
假设我们编写的脚本有三个选项:
a
:无参数
b
:带有必需的参数
v
:使用0
到2
之间的值设置详细度。默认值为0
,在使用-v
调用脚本时使用预设值,无参数或使用错误值
代码如下:
我发现了一个技巧,可以在getopts中使用带有可选参数的参数
Jan Schampera在bash-hackers.org上的回复中给出了管理可选参数在命令中的情况的方法:
(请参阅:本页的最深处)
但它不管理c