#!/bin/bash
-# A small example program for using the new getopt(1) program.
-# This program will only work with bash(1)
-# An similar program using the tcsh(1) script language can be found
-# as parse.tcsh
+# A small example script for using the getopt(1) program.
+# This script will only work with bash(1).
+# A similar script using the tcsh(1) language can be found
+# as getopt-parse.tcsh.
# Example input and output (from the bash prompt):
-# ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long "
+#
+# ./getopt-parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long "
# Option a
# Option c, no argument
-# Option c, argument `more'
-# Option b, argument ` very long '
+# Option c, argument 'more'
+# Option b, argument ' very long '
# Remaining arguments:
-# --> `par1'
-# --> `another arg'
-# --> `wow!*\?'
+# --> 'par1'
+# --> 'another arg'
+# --> 'wow!*\?'
-# Note that we use `"$@"' to let each command-line parameter expand to a
-# separate word. The quotes around `$@' are essential!
-# We need TEMP as the `eval set --' would nuke the return value of getopt.
-TEMP=$(getopt -o ab:c:: --long a-long,b-long:,c-long:: \
- -n 'example.bash' -- "$@")
+# Note that we use "$@" to let each command-line parameter expand to a
+# separate word. The quotes around "$@" are essential!
+# We need TEMP as the 'eval set --' would nuke the return value of getopt.
+TEMP=$(getopt -o 'ab:c::' --long '-long,b-long:,c-long::' -n 'example.bash' -- "$@")
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+if [ $? -ne 0 ]; then
+ echo 'Terminating...' >&2
+ exit 1
+fi
-# Note the quotes around `$TEMP': they are essential!
+# Note the quotes around "$TEMP": they are essential!
eval set -- "$TEMP"
+unset TEMP
-while true ; do
+while true; do
case "$1" in
- -a|--a-long) echo "Option a" ; shift ;;
- -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;;
- -c|--c-long)
+ '-a'|'--a-long')
+ echo 'Option a'
+ shift
+ continue
+ ;;
+ '-b'|'--b-long')
+ echo "Option b, argument '$2'"
+ shift 2
+ continue
+ ;;
+ '-c'|'--c-long')
# c has an optional argument. As we are in quoted mode,
# an empty parameter will be generated if its optional
# argument is not found.
case "$2" in
- "") echo "Option c, no argument"; shift 2 ;;
- *) echo "Option c, argument \`$2'" ; shift 2 ;;
- esac ;;
- --) shift ; break ;;
- *) echo "Internal error!" ; exit 1 ;;
+ '')
+ echo 'Option c, no argument'
+ ;;
+ *)
+ echo "Option c, argument '$2'"
+ ;;
+ esac
+ shift 2
+ continue
+ ;;
+ '--')
+ shift
+ break
+ ;;
+ *)
+ echo 'Internal error!' >&2
+ exit 1
+ ;;
esac
done
-echo "Remaining arguments:"
-for arg do echo '--> '"\`$arg'" ; done
+
+echo 'Remaining arguments:'
+for arg; do
+ echo "--> '$arg'"
+done