How to make a multi-character parameter in UNIX using getopt? How to make a multi-character parameter in UNIX using getopt? unix unix

How to make a multi-character parameter in UNIX using getopt?


getopt doesn't support what you are looking for. You can either use single-letter (-a) or long options (--long). Something like -ab is treated the same way as -a b: as option a with argument b. Note that long options are prefixed by two dashes.


i was struggling with this for long - then i got into reading about getopt and getopts

single char options and long options .

I had similar requirement where i needed to have number of multichar input arguments.

so , i came up with this - it worked in my case - hope this helps you

function show_help {    echo "usage:  $BASH_SOURCE --input1 <input1> --input2 <input2> --input3 <input3>"    echo "                     --input1 - is input 1 ."    echo "                     --input2 - is input 2 ."    echo "                     --input3 - is input 3 ."}# Read command line optionsARGUMENT_LIST=(    "input1"    "input2"    "input3")# read argumentsopts=$(getopt \    --longoptions "$(printf "%s:," "${ARGUMENT_LIST[@]}")" \    --name "$(basename "$0")" \    --options "" \    -- "$@")echo $optseval set --$optswhile true; do    case "$1" in    h)        show_help        exit 0        ;;    --input1)          shift        empId=$1        ;;    --input2)          shift        fromDate=$1        ;;    --input3)          shift        toDate=$1        ;;      --)        shift        break        ;;    esac    shiftdone

Note - I have added help function as per my requirement, you can remove it if not needed


That's not the unix way, though some do it e.g. java -cp classpath.

Hack: instead of -ab arg, have -b arg and a dummy option -a.

That way, -ab arg does what you want. (-b arg will too; hopefully that's not a bug, but a shortcut feature...).

The only change is your line:

-ab) shift;echo "You typed ab $1.";shift;;

becomes

-b) shift;echo "You typed ab $1.";shift;;