-sharp!/bin/bash
ARGS=`getopt -o ab: -l "argv3:,help" -- "$@"`
eval set -- "${ARGS}"
while true;
do
    case "$1" in
        -a) 
            echo "i am a"
            shift
            ;;
        -b) 
            echo "i am b, my value is $2" 
            shift 2
            ;;
        --argv3)
            echo "i am argv3, my value is $2"
            shift 2
            ;;
        --help)
            echo "i am help info"
            exit 0
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done
 the above file is saved as test.sh 
 1.test.sh, and Internal error! 
- -- "$@"
 $@ represents all the parameter lists. 
 what does the "$@" here mean? 
ARGS=`getopt -o ab: -l "argv3:,help" -- "$@"`
 rewrite ARGS=  getopt-o ab:-l "argv3:,help"-"$@"  to 
ARGS=`getopt -o ab: -l "argv3:,help" ` 
