哪个引发内部错误?

时间:2018-06-17 09:22:54

标签: bash getopt

编辑mytest.sh的内容。

#!/bin/bash    
ARGS=`getopt -o c`
eval set -- "${ARGS}"

while true;
do
    case "$1" in
        -c)
            echo "i am c"
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done

bash mytest.sh -c获取错误信息Internal error!,为什么无法触发信息i am c

1 个答案:

答案 0 :(得分:1)

#!/bin/bash    
ARGS=$(getopt -o c -- "$@")
eval set -- "${ARGS}"

while true;
do
    case "$1" in
        -c)
            echo "i am c"
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done

我真的不知道你打算做什么。但是你当前的代码导致无限循环。更好的方法是:在遇到选项后从while条件中断。

最有可能做得更好:

#!/bin/bash    
ARGS=$(getopt -o c -- "$@")
eval set -- "${ARGS}"

while true;
do
    case "$1" in
        -c)
            echo "i am c"
            # do some processing.
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done

注意:顺便说一句,更喜欢使用getopts而不是getopt