我想知道哪些字符是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实现是不正确的。
哪些字符被排除/非法短期选择?我知道':'被排除在外,很明显,那个'?'被定义为总是非法的,因此' - ?'主要用于显示使用信息页面。
答案 0 :(得分:1)
POSIX说:
optstring 中允许使用“效用语法指南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扩展。
所以它也接受了这些。如果其他人为你工作,我认为这很好,但要注意利用无证件行为。