Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Unix中,是否可以给getops一个预期的值范围?_Unix_Shell_Getopt - Fatal编程技术网

在Unix中,是否可以给getops一个预期的值范围?

在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

如果标题令人困惑,很抱歉,但我的意思是:

如果我有一个可以接受多个参数的脚本,我会使用getops命令,以便根据传递的参数更容易地控制脚本操作。但是,假设其中一个参数可以是5-9之间的任何数字,或者其他任何数字。有没有办法告诉getops,作为命令传递给脚本的5到9之间的任何数字都应该作为单用户命令

到目前为止,我的代码类似于:

#!/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