How to make a multi-character parameter in UNIX using getopt?
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;;