getopt いろいろ
C言語
getopt
http://www.h7.dion.ne.jp/~matsu/feature/c-language/basic-library/getargs.html
man getopt, getopt_long
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/getopt.3.html
C++
GetOpt クラス
http://www.fides.dti.ne.jp/~oka-t/libraries.html
SimpleOpt (Win, Linux / MIT License / glob() もできるらしい)
http://www.codeproject.com/useritems/SimpleOpt.asp?df=100&forumid=296099&exp=0&select=1524823
Ruby
require 'getopts' # 第1引数は1文字オプション # 第2引数以降はロングネームオプション unless getopts('vhf:', 'version', 'help', 'field:,') abort "usage: #$0 [OPTION]... file" end if $OPT_v or $OPT_version puts VERSION_STRING exit end # ARGV からオプションは取り除かれる。 while line = ARGF.gets # ... end
getopts は非推奨になってしまったらしい。
代わりに optparse を使う。
#!/usr/bin/env ruby require 'optparse' $options = {} ARGV.options {|opt| opt.on('-a ARG','argument a') {|v| p v; $options[:a] = v } # v に -a の引数が入る opt.on('-b') {|v| p v; $options[:b] = true } opt.on_tail('-h', '--help', 'Show this help') do puts opt exit end opt.parse! } p ARGV
sh
組み込みコマンド getopts と外部コマンド getopt がある。
この2つは、オプションが必ず非オプションの引数より前に
来なければならない。
組み込みコマンド getopts
FLAG=FALSE VALUE= OPT= while getopts fv: OPT do case $OPT in f) FLAG=TRUE ;; v) VALUE=$OPTARG ;; \?) echo "Usage : $0 [-f] [-v value]" 1>&2 exit 1 ;; esac done shift `expr $OPTIND - 1`
外部コマンド getopt
FLAG=FALSE VALUE= OPT= set -- `getopt fv: $*` if [ $? != 0 ]; then echo "Usage: $0 [-f] [-v value]" 1>&2 exit 1 fi for OPT in $* do case $OPT in -f) FLAG=TRUE shift ;; -v) VALUE=$2 shift 2 ;; --) shift break ;; esac done