getopt いろいろ

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

Visual C++

コマンドライン解析
A Unix-compatible getopt() for MFC and Win32
http://www.codeproject.com/cpp/xgetopt.asp
MSDN にも getopt の例が書いてあった。