Как мне разобрать аргументы командной строки в Bash?

Перечисления часто используются в качестве флагов:

[Flags]
enum Permission
{
    None = 0x00,
    Read = 0x01,
    Write = 0x02,
}
...

Permission p = Permission.Read | Permission.Write;

Значение p является целым числом 3, которое не является значением перечисления, но явно является допустимым значением.

Я лично предпочел бы другое решение; Я предпочел бы иметь возможность создавать «бит-массив» целых типов и «набор различных значений» как две разные языковые функции, а не объединять их в «перечисление». Но это то, что придумали оригинальные разработчики языка и рамки; в результате мы должны разрешить не объявленные значения перечисления как легальные значения.

1659
задан codeforester 13 March 2019 в 18:44
поделиться

1 ответ

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" разбивает опции и помещает каждого в его собственный аргумент. Это также добавило "-".

103
ответ дан Matt J 13 March 2019 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: