Перечисления часто используются в качестве флагов:
[Flags]
enum Permission
{
None = 0x00,
Read = 0x01,
Write = 0x02,
}
...
Permission p = Permission.Read | Permission.Write;
Значение p является целым числом 3, которое не является значением перечисления, но явно является допустимым значением.
Я лично предпочел бы другое решение; Я предпочел бы иметь возможность создавать «бит-массив» целых типов и «набор различных значений» как две разные языковые функции, а не объединять их в «перечисление». Но это то, что придумали оригинальные разработчики языка и рамки; в результате мы должны разрешить не объявленные значения перечисления как легальные значения.
getopt()
/ getopts()
хороший вариант. Украденный от здесь :
простое использование "getopt" показывают в этом мини-сценарии:
#!/bin/bash
echo "Before getopt"
for i
do
echo $i
done
args=`getopt abc:d $*`
set -- $args
echo "After getopt"
for i
do
echo "-->$i"
done
то, Что мы сказали, - то, что любой из-a,-b,-c или-d будет позволен, но что-c сопровождается аргументом ("c": говорит это).
, Если мы называем этот "g" и испытываем его:
bash-2.05a$ ./g -abc foo
Before getopt
-abc
foo
After getopt
-->-a
-->-b
-->-c
-->foo
-->--
Мы запускаем с двух аргументов, и "getopt" разбивает опции и помещает каждого в его собственный аргумент. Это также добавило "-".