所以我的getopt代码如下所示:
ARG_H=0
ARG_V=0
ARG_A=0
ARG_N=5
TEMP=`getopt -o hvn:a -n "vdu" -- "$1"`
eval set -- "$TEMP"
while true ; do
case "$1" in
-h|--argh) ARG_H=1 ; shift ;;
-v|--argv) ARG_V=1 ; shift ;;
-n|--argn)
case "$2" in
"") shift 2 ;;
*) ARG_N=$2 ; shift 2 ;;
esac ;;
-a|--arga) ARG_A=1 ; shift ;;
--) shift ; break ;;
*) echo "error" ; exit 1 ;;
esac
done
echo "$ARG_H"
echo "$ARG_V"
echo "$ARG_N"
echo "$ARG_A"
但由于某种原因,它只有在我的命令行如下所示才有效:
./vdu -a-v-n15
或
./vdu -avn15
但如果我输入
./vdu -a -v -n 15
它只会注册第一个标志。为什么是这样?这段代码似乎与我一直在研究的getopts教程相同。
答案 0 :(得分:0)
def show
redirect_to "/some-url", status: 301
end
TEMP=`getopt -o hvn:a -n "vdu" -- "$1"`
只是你程序的第一个参数。使用$1
传递所有参数。
$@
其他想法:
TEMP=`getopt -o hvn:a -n "vdu" -- "$@"`
传递给$0
而不是硬编码程序名称是很传统的。-n
与eval set
电话合并,则可以跳过临时变量。getopt
代替$(...)
被认为是一种很好的风格。 `...`
可以更轻松地嵌套。结果:
$(...)