#!/bin/bash function getopt() { var="" wantarg=0 for (( i=1; i<=$#; i+=1 )); do lastvar=$var var=${!i} if [ "$var" = "" ]; then continue fi echo \ $var | grep -q -- '=' if [ $? -eq 0 ]; then ## -*param=value var=$(echo \ $var | sed -r s/'^[ ]*-*'/''/) myvar=${var%=*} myval=${var#*=} eval "${myvar}"="'$myval'" else echo \ $var | grep -E -q -- '^[ ]*-' if [ $? -eq 0 ]; then ## -*param$ var=$(echo \ $var | sed -r s/'^[ ]*-*'/''/) eval "${var}"=1 wantarg=1 else echo \ $var | grep -E -- '^[ ]*-' if [ $? -eq 0 ]; then # the current one has a dash, so cannot be # the argument to the last parameter wantarg=0 fi if [ $wantarg -eq 1 ]; then # parameter argument val=$var var=$lastvar eval "${var}"="'${val}'" wantarg=0 else # parameter if [ "${!var}" = "" ]; then eval "${var}"=1 fi wantarg=0 fi fi fi done } OIFS=$IFS; IFS=$(echo -e "\n"); getopt $@; IFS=$OIFS echo -e " foo:\t$foo v:\t$v n:\t$n blah:\t$blah one:\t$one "