getopts选项处理,是否可以添加非连字符的[FILE]?

getopts选项处理,是否可以添加非连字符的[FILE]?

我正在使用getopts所有需要高级选项解析的脚本,并且它与dash.我熟悉标准的基本getopts用法,由[-x]和组成[-x OPTION]

是否可以解析这样的选项?

 dash_script.sh FILE -x -z -o OPTION
 ## Or the inverse?
 dash_script.sh -x -z -o OPTION FILE

答案1

脚本参数通常位于选项之后。查看任何其他命令(例如cp或 )ls,您会发现情况确实如此。

所以,要处理:

dash_script.sh -x -z -o OPTION FILE

您可以使用getopts如下所示:

while getopts xzo: option
do
    case "$option" in
        x) echo "x";;
        z) echo "z";;
        o) echo "o=$OPTARG";;
    esac
done
shift $(($OPTIND-1))
FILE="$1"

处理选项后,getopts设置$OPTIND为第一个非选项参数的索引,在本例中为FILE

答案2

Getopt 将重新排列参数并将所有非选项参数放在末尾,之后--

$ getopt -o a: -- nonoption-begin -a x nonoption-middle -a b nonoption-end
-a 'x' -a 'b' -- 'nonoption-begin' 'nonoption-middle' 'nonoption-end'

如果您确实需要知道非选项参数位于开头,您可以$1在调用之前检查是否是一个选项,如果不是则提取它getopt

if [ ${1#-} = $1 ]; then
  NONOPTION=$1
  shift
fi
ARGS=$(getopt ...)

相关内容