在Unix中,是否可以给getops一个预期的值范围?
如果标题令人困惑,很抱歉,但我的意思是: 如果我有一个可以接受多个参数的脚本,我会使用getops命令,以便根据传递的参数更容易地控制脚本操作。但是,假设其中一个参数可以是5-9之间的任何数字,或者其他任何数字。有没有办法告诉getops,作为命令传递给脚本的5到9之间的任何数字都应该作为单用户命令 到目前为止,我的代码类似于:在Unix中,是否可以给getops一个预期的值范围?,unix,shell,getopt,Unix,Shell,Getopt,如果标题令人困惑,很抱歉,但我的意思是: 如果我有一个可以接受多个参数的脚本,我会使用getops命令,以便根据传递的参数更容易地控制脚本操作。但是,假设其中一个参数可以是5-9之间的任何数字,或者其他任何数字。有没有办法告诉getops,作为命令传递给脚本的5到9之间的任何数字都应该作为单用户命令 到目前为止,我的代码类似于: #!/bin/sh args=`getopt -o abc: -- "$@"` eval set -- "$args" echo "After getopt" for
#!/bin/sh
args=`getopt -o abc: -- "$@"`
eval set -- "$args"
echo "After getopt"
for i in $args
do
case "$i" in
-c) shift;echo "flag c set to $1";shift;;
-a) shift;echo "flag a set";;
-b) shift;echo "flag b set";;
done
#!/bin/sh
args=`getopt -o ab[0-9]c: -- "$@"`
eval set -- "$args"
echo "After getopt"
for i in $args
do
case "$i" in
-c) shift;echo "flag c set to $1";shift;;
-a) shift;echo "flag a set";;
-b) shift;echo "flag b set";;
-[0-9]) shift; echo $i;;
done
我想看看我是否能做到:
#!/bin/sh
args=`getopt -o abc: -- "$@"`
eval set -- "$args"
echo "After getopt"
for i in $args
do
case "$i" in
-c) shift;echo "flag c set to $1";shift;;
-a) shift;echo "flag a set";;
-b) shift;echo "flag b set";;
done
#!/bin/sh
args=`getopt -o ab[0-9]c: -- "$@"`
eval set -- "$args"
echo "After getopt"
for i in $args
do
case "$i" in
-c) shift;echo "flag c set to $1";shift;;
-a) shift;echo "flag a set";;
-b) shift;echo "flag b set";;
-[0-9]) shift; echo $i;;
done
不,至少我用的那个不是(有人可能有一个增强版,但它在任何地方都不是标准版) 对于这种特殊情况,可能可以使用:
args=`getopt -o ab0123456789c: -- "$@"`
不过,在更大的情况下,这可能会很麻烦
你有没有想过不把它们当作个人选择?换句话说,假设它们是日志过程的调试级别。为什么您不能使用:
args=`getopt -o abc:d: -- "$@"`
并用
progname-b-d4
而不是progname-b-4
?指定它们,括号扩展不会做你认为它做的事情:`echo ab{0..9}c`=>ab0c ab1c ab2c ab3c ab4c ab5c ab6c ab7c ab8c ab9c