bash - 如何将 getopts 与 unix shell 函数一起使用?

标签 bash shell unix getopts

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))
}

最佳答案

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

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

关于bash - 如何将 getopts 与 unix shell 函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975049/

相关文章:

linux - chown 没有 root 权限的特定文件夹

linux - 对每个主机使用自定义参数的并行 SSH

linux - 系统调用 : UNIX, Linux、BSD 和 Solaris 变体

regex - 如何使用 grep 匹配空格或换行符

c - 为什么我的父进程没有等待第二次? C/Unix

unix - 问题与expect -send : spawn id exp4 not open

bash - 在不关闭 shell 的情况下返回退出代码

bash - 我怎样才能让 git 递归地列出所有未跟踪的文件?

bash - 为每次运行的 bash 脚本维护日志

linux - 检查使用的分区是什么?