【问题标题】:Which trigger the internal error?哪个触发了内部错误?
【发布时间】:2018-06-17 09:22:54
【问题描述】:

编辑 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

【问题讨论】:

标签: bash getopt


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多