哪些字符是GNU getopt的有效短信?

时间:2015-02-15 02:10:56

标签: bash getopt

我想知道哪些字符是GNU getopt的有效短信,它是用许多不同的语言实现的,比如Bash或PHP。

我没有找到定义它的官方文档,或者我已经过度了。

我按照Bash脚本进行了测试:

#!/bin/bash

while getopts ":a%2" opt; do
  case $opt in
    a)
      echo "-a was triggered!" >&2
      ;;
    %)
      echo "-% was triggered!" >&2
      ;;
    2)
      echo "-2 was triggered!" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

结果:

$ ./test -a%2x
-a was triggered!
-% was triggered!
-2 was triggered!
Invalid option: -x

所以我可以说至少 - %和-2是有效的短选择,或者Bash的getopt实现是不正确的。

哪些字符被排除/非法短期选择?我知道':'被排除在外,很明显,那个'?'被定义为总是非法的,因此' - ?'主要用于显示使用信息页面。

1 个答案:

答案 0 :(得分:1)

POSIX说:

  

optstring 中允许使用“效用语法指南3”允许的所有选项字符。实现可以接受其他字符作为扩展名。

Guideline 3说:

  

每个选项名称应该是便携式字符集中的单个字母数字字符( alnum 字符分类)。 -W (大写字母)选项应保留给供应商选项。   不应允许多位数选项。

反过来,alnum class被定义为以下字符:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9

Linux getopt(3)联机帮助页说:

  

使用' +'和' - ' in optstring 是一个GNU扩展。

所以它也接受了这些。如果其他人为你工作,我认为这很好,但要注意利用无证件行为。

相关问题