替代 Get Opt |
|
-- getopt_alt.lua -- getopt, POSIX style command line argument parser -- param arg contains the command line arguments in a standard table. -- param options is a string with the letters that expect string values. -- returns a table where associated keys are true, nil, or a string value. -- The following example styles are supported -- -a one ==> opts["a"]=="one" -- -bone ==> opts["b"]=="one" -- -c ==> opts["c"]==true -- --c=one ==> opts["c"]=="one" -- -cdaone ==> opts["c"]==true opts["d"]==true opts["a"]=="one" -- note POSIX demands the parser ends at the first non option -- this behavior isn't implemented. function getopt( arg, options ) local tab = {} for k, v in ipairs(arg) do if string.sub( v, 1, 2) == "--" then local x = string.find( v, "=", 1, true ) if x then tab[ string.sub( v, 3, x-1 ) ] = string.sub( v, x+1 ) else tab[ string.sub( v, 3 ) ] = true end elseif string.sub( v, 1, 1 ) == "-" then local y = 2 local l = string.len(v) local jopt while ( y <= l ) do jopt = string.sub( v, y, y ) if string.find( options, jopt, 1, true ) then if y < l then tab[ jopt ] = string.sub( v, y+1 ) y = l else tab[ jopt ] = arg[ k + 1 ] end else tab[ jopt ] = true end y = y + 1 end end end return tab end -- Test code opts = getopt( arg, "ab" ) for k, v in pairs(opts) do print( k, v ) end -- EOF