Реализация Шаблона разработки в Java и AspectJ (Hannemann и Kiczales): http://www.cs.ubc.ca/labs/spl/papers/2002/oopsla02-patterns.pdf
бумага показывает, как некоторые шаблоны разработки GoF могут реализованный лучшим способом в Java с помощью AspectJ
Возможно, лучше использовать getopt .
Если вы хотите увидеть код сканирования аргументов в bash, способ без getopt:
realargs="$@"
while [ $# -gt 0 ]; do
case "$1" in
-x | -y | -z)
echo recognized one argument option $1 with arg $2
shift
;;
-a | -b | -c)
echo recognized zero argument option $1, no extra shift
;;
*)
saveme=$1
break 2
;;
esac
shift
done
set -- $realargs
echo saved word: $saveme
echo run real command: "$@"
Невозможно выбрать какой-либо конкретный аргумент, не изучив всю командную строку. Причиной этого является базовое предположение bash о том, что любой параметр может появляться в любом порядке, независимо от относительного положения в командной строке. Другая предпосылка состоит в том, что любая опция, указанная на страницах руководства в кратком или длинном формате (например, «-f» или «--file»), будет иметь допустимое, признанное использование при выполнении команды.
Ваш Лучше всего использовать пример, предоставленный DigitalRoss, и либо закодировать значение для оператора case для каждой допустимой опции для команды, либо кодировать только те, с которыми вы хотите иметь дело в своем скрипте, и зафиксировать все остальное с помощью «*)» строить и игнорировать его, если он попадает под этот тест. Уловка заключается в том, что если конкретная опция имеет более одного действительного аргумента, вам нужно заранее знать, является ли различие между аргументами позиционным или сопоставлением с образцом на основе содержимого аргумента. Вам также потребуется использовать директиву skip для перехода от одного аргумента к другому для параметров с несколькими аргументами.
Вы, вероятно, захотите что-нибудь сделать с getopt
(смотрите здесь или здесь , чтобы узнать, как использовать).
Возможно, сохраните всю командную строку (чтобы ее можно было передать в настоящий инструмент без изменений), затем обработайте аргументы с помощью getopt
, возьмите необходимую информацию и запустите вспомогательный инструмент.