РЕДАКТИРОВАТЬ: Пожалуйста, пожалуйста , пожалуйста прочитайте два требования, перечисленных в нижней части этого сообщения, прежде чем ответить. Люди продолжают публиковать свои новые гемы и библиотеки и все такое, что явно не соответствует требованиям.
Иногда я хочу очень дешево взломать некоторые параметры командной строки в простой скрипт. Забавный способ сделать это, не имея дело с getopts или синтаксическим анализом или чем-то подобным, является:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Это не совсем обычный синтаксис опций Unix, потому что он будет принимать параметры командной строки, не являющиеся опциями, как в "myprog -i foo bar -q
", но я могу с этим смириться. (Некоторые люди, такие как разработчики Subversion, предпочитают это. Иногда я тоже.)
Опция, которая просто присутствует или отсутствует, не может быть реализована намного проще, чем описанная выше. (Одно присваивание, один вызов функции, один побочный эффект.) Есть ли такой же простой способ работать с опциями, которые принимают параметр, например, "-f
filename "?
EDIT:
Одно замечание, которое я раньше не делал, потому что мне не стало ясно, пока автор Trollop не упомянул, что библиотека помещается «в один [800-строчный] файл», это то, что я смотрю не только для чистого синтаксиса, но для техники, которая имеет следующие характеристики:
Весь код может быть включен в файл сценария (без перегрузки самого сценария, который может составлять всего пару десятков строк), так что можно поместить один файл в bin
dir на любой системе со стандартной установкой Ruby 1.8. [5-7] и используйте ее. Если вы не можете написать скрипт на Ruby, в котором нет операторов require и где код для анализа пары опций находится под дюжиной строк или около того, вы не выполняете это требование.
Код небольшой и достаточно простой, чтобы его можно было запомнить достаточно для непосредственного ввода кода, который поможет, а не вырезания и вставки из другого места. Подумайте о ситуации, когда вы находитесь на консоли сервера с межсетевым экраном без доступа к Интернету, и вы хотите собрать быстрый сценарий для использования клиентом. Я не знаю, как вы, но (кроме несоблюдения вышеуказанного требования) запоминание даже 45 строк упрощенного микрообъекта - это не то, что я хочу сделать.