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/