【问题标题】:How to use getopts with unix shell functions?如何将 getopts 与 unix shell 函数一起使用?
【发布时间】:2014-05-31 22:31:57
【问题描述】:

getopts 命令似乎在函数中不起作用。也许我做错了什么。下面的代码就是我现在所拥有的。如果我将整个while循环放在函数之外,它就可以工作。我想知道是否有办法让 getopts 与函数一起工作?我是 shell 脚本的新手。任何帮助将不胜感激:)

getOptions()
{
    while getopts :al:f:vd opt; do
            case "$opt" in
                    l) logFile = $OPTARG ;;
                    f) fileTable = $OPTARG ;;
                    v) verbose = 1 ;;
                    d) set -x ;;
                    a) echo "a";;
                    \?) echo "Invalid option: -$opt";;
            esac
    done
    shift $(($OPTIND - 1))
}

【问题讨论】:

    标签: bash shell unix getopts


    【解决方案1】:

    其中一个原因可能是您使用了 logFile = $OPTARG 之类的东西,而那里不应该有任何空格(应该是 logFile=$OPTARG)。

    另一个原因是 $1、$2 等都是指函数的参数,而不是 shell 脚本的参数。由于 shell 以这种方式工作,并且 getopts 使用 $1、$2 等,因此您将函数的参数与 getopts 一起使用,而不是脚本的参数。换句话说,将您的选项处理限制在 shell 函数中并不是一个好主意。

    【讨论】:

    • +1;我想如果您使用 getOptions "$@" 调用函数来传递 脚本的 参数,那么使用函数是可以的。
    • 这是有道理的。太感谢了!我总是忘记不要在两者之间放置空格...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多