i was messing around with "getopts" and wanted to document several examples of encouraged usage, and one of the examples is here (note the leading ":" in the getopts string, which overrides normal error processing): ===== start #!/bin/bash --posix aflag= bflag= cflag= while getopts :ab:c name do case $name in a) aflag=1 ;; b) bflag=1 bval="$OPTARG" ;; c) cflag=1 ;; :) echo "${OPTARG} requires an argument" ;; \?) echo "Unknown option $OPTARG" ;; esac done if [ ! -z "$aflag" ]; then printf "Option -a specified\n" fi if [ ! -z "$bflag" ]; then printf 'Option -b "%s" specified\n' "$bval" fi if [ ! -z "$cflag" ]; then printf "Option -c specified\n'" fi shift $(($OPTIND - 1)) printf "Remaining arguments are: %s\n" "$*" ===== end clearly, the above shows that options "-a" and "-c" do not take an argument, while "-b" does. so i tested it, and was surprised to see: $ ./1.sh -a -b -c Option -a specified Option -b "-c" specified Remaining arguments are: $ in short, rather than being told that "-b" has a missing argument, it simply used the argument "-c" for that. i did *not* see that coming. is that normal behaviour? it seems somehow counter-intuitive. rday To unsubscribe send a blank message to linux+unsubscribe [ at ] linux-ottawa [ dot ] org To get help send a blank message to linux+help [ at ] linux-ottawa [ dot ] org To visit the archives: https://lists.linux-ottawa.org