getoptและgetoptsเป็นสัตว์ที่แตกต่างกันและผู้คนดูเหมือนจะมีความเข้าใจผิดบ้างเกี่ยวกับสิ่งที่พวกเขาทำ  getoptsเป็นคำสั่งในตัวbashเพื่อประมวลผลตัวเลือกบรรทัดคำสั่งในลูปและกำหนดตัวเลือกและค่าที่พบแต่ละตัวให้กับตัวแปรบิวด์อินดังนั้นคุณจึงสามารถประมวลผลได้  getoptอย่างไรก็ตามเป็นโปรแกรมอรรถประโยชน์ภายนอกและไม่ได้ประมวลผลตัวเลือกของคุณสำหรับคุณเช่น bash getopts, GetoptโมดูลPerl หรือ Python optparse/ argparsemodules ทำ สิ่งที่getoptทำคือกำหนดตัวเลือกที่ส่งผ่าน - ให้แปลงเป็นรูปแบบมาตรฐานมากขึ้นเพื่อให้เชลล์สคริปต์ประมวลผลได้ง่ายขึ้น ตัวอย่างเช่นแอปพลิเคชันgetoptอาจแปลงสิ่งต่อไปนี้:
myscript -ab infile.txt -ooutfile.txt
เป็นนี้
myscript -a -b -o outfile.txt infile.txt
คุณต้องทำการประมวลผลจริงด้วยตัวเอง คุณไม่จำเป็นต้องใช้getoptเลยหากคุณมีข้อ จำกัด ต่าง ๆ เกี่ยวกับวิธีที่คุณสามารถระบุตัวเลือก:
- ใส่เพียงหนึ่งตัวเลือกต่อการโต้แย้ง; 
 
- ตัวเลือกทั้งหมดไปข้างหน้าพารามิเตอร์ตำแหน่งใด ๆ (เช่นอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก);
 
- สำหรับตัวเลือกที่มีค่า (เช่น
-oด้านบน) ค่าจะต้องเป็นอาร์กิวเมนต์แยกต่างหาก (หลังจากเว้นวรรค) 
ทำไมต้องใช้getoptแทนgetopts? เหตุผลพื้นฐานคือมีเพียง GNU ที่getoptให้การสนับสนุนตัวเลือกบรรทัดคำสั่งที่มีชื่อยาว 1 (GNU getoptเป็นค่าเริ่มต้นบน Linux Mac OS X และ FreeBSD มาพร้อมกับรุ่นพื้นฐานและไม่มีประโยชน์มากgetoptแต่สามารถติดตั้งรุ่น GNU ได้ดูด้านล่าง)
ตัวอย่างเช่นนี่คือตัวอย่างของการใช้ GNU getoptจากสคริปต์ของฉันที่เรียกว่าjavawrap:
# NOTE: This requires GNU getopt.  On Mac OS X and FreeBSD, you have to install this
# separately; see below.
TEMP=`getopt -o vdm: --long verbose,debug,memory:,debugfile:,minheap:,maxheap: \
             -n 'javawrap' -- "$@"`
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"
VERBOSE=false
DEBUG=false
MEMORY=
DEBUGFILE=
JAVA_MISC_OPT=
while true; do
  case "$1" in
    -v | --verbose ) VERBOSE=true; shift ;;
    -d | --debug ) DEBUG=true; shift ;;
    -m | --memory ) MEMORY="$2"; shift 2 ;;
    --debugfile ) DEBUGFILE="$2"; shift 2 ;;
    --minheap )
      JAVA_MISC_OPT="$JAVA_MISC_OPT -XX:MinHeapFreeRatio=$2"; shift 2 ;;
    --maxheap )
      JAVA_MISC_OPT="$JAVA_MISC_OPT -XX:MaxHeapFreeRatio=$2"; shift 2 ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done
สิ่งนี้ช่วยให้คุณระบุตัวเลือกเช่น--verbose -dm4096 --minh=20 --maxhe 40 --debugfi="/Users/John Johnson/debug.txt"หรือคล้ายกัน ผลกระทบของการเรียกไปยังgetoptคือกำหนดตัวเลือกให้เป็นมาตรฐานเพื่อ--verbose -d -m 4096 --minheap 20 --maxheap 40 --debugfile "/Users/John Johnson/debug.txt"ให้คุณสามารถดำเนินการได้ง่ายขึ้น การอ้างถึง"$1"และ"$2"มีความสำคัญเนื่องจากทำให้มั่นใจได้ว่าข้อโต้แย้งที่มีช่องว่างในนั้นจะได้รับการจัดการอย่างถูกต้อง
หากคุณลบ 9 บรรทัดแรก (ทุกอย่างจนถึงeval setบรรทัด) รหัสจะยังใช้งานได้ ! อย่างไรก็ตามรหัสของคุณจะเป็นตัวเลือกที่ดีกว่าในประเภทตัวเลือกที่ยอมรับ: โดยเฉพาะอย่างยิ่งคุณจะต้องระบุตัวเลือกทั้งหมดในแบบฟอร์ม "มาตรฐาน" ตามที่อธิบายไว้ข้างต้น อย่างไรก็ตามด้วยการใช้งานgetoptคุณสามารถจัดกลุ่มตัวเลือกแบบตัวอักษรเดียวใช้แบบยาวแบบไม่คลุมเครือของตัวเลือกแบบยาวใช้แบบ--file foo.txtหรือ--file=foo.txtแบบใช้แบบ-m 4096หรือ-m4096แบบตัวเลือกแบบผสมและแบบไม่มีตัวเลือกในลำดับใด ๆ ฯลฯ   getoptเอาท์พุทข้อความแสดงข้อผิดพลาดหากพบตัวเลือกที่ไม่รู้จักหรือคลุมเครือ
หมายเหตุ : จริง ๆ แล้วมีสองรุ่นที่แตกต่างกันโดยสิ้นเชิงของgetoptพื้นฐานgetoptและ GNU ที่getoptมีคุณสมบัติที่แตกต่างกันและการประชุมที่แตกต่างกัน 2พื้นฐานgetoptค่อนข้างเสียหาย: ไม่เพียงจัดการกับตัวเลือกที่ยาว แต่ยังไม่สามารถจัดการช่องว่างที่ฝังอยู่ภายในอาร์กิวเมนต์หรือว่างเปล่าในขณะที่getoptsทำสิ่งนี้ถูกต้อง getoptรหัสข้างต้นจะไม่ทำงานในขั้นพื้นฐาน GNU ได้getoptรับการติดตั้งตามค่าเริ่มต้นบน Linux แต่สำหรับ Mac OS X และ FreeBSD จะต้องติดตั้งแยกต่างหาก บน Mac OS X ให้ติดตั้ง MacPorts ( http://www.macports.org ) จากนั้นทำการsudo port install getoptติดตั้ง GNU getopt(โดยทั่วไป/opt/local/bin) และตรวจสอบให้แน่ใจว่า/opt/local/binอยู่ในเส้นทางเชลล์ของคุณก่อน/usr/binและให้แน่ใจว่า บน FreeBSD ให้ติดตั้งmisc/getopt.
คู่มือรวดเร็วในการปรับเปลี่ยนโค้ดตัวอย่างสำหรับโปรแกรมของคุณเอง: ในไม่กี่บรรทัดแรกทั้งหมดคือ "ต้นแบบ" getoptที่ควรจะอยู่เหมือนกันยกเว้นสายที่โทร คุณควรเปลี่ยนชื่อโปรแกรมหลังจาก-nระบุตัวเลือกสั้น ๆ หลังจากและตัวเลือกนานหลังจากที่-o --longใส่เครื่องหมายจุดคู่หลังตัวเลือกที่รับค่า
สุดท้ายหากคุณเห็นรหัสที่ได้มาเพียงแค่setแทนeval setมันถูกเขียนขึ้นสำหรับ getoptBSD คุณควรเปลี่ยนไปใช้eval setรูปแบบซึ่งทำงานได้ดีกับทั้งสองรุ่นgetoptในขณะที่ธรรมดาsetไม่ได้ทำงานที่ถูกต้องกับ getoptGNU
1อันที่จริงgetoptsในksh93การสนับสนุนระยะยาวที่มีชื่อตัวเลือก bashแต่เปลือกนี้จะไม่ใช้บ่อยเท่า ในzshใช้zparseoptsเพื่อรับฟังก์ชั่นนี้
2 ในทางเทคนิค "GNU getopt" เป็นชื่อเรียกที่ไม่ถูกต้อง รุ่นนี้เขียนขึ้นจริงสำหรับ Linux มากกว่าโครงการ GNU อย่างไรก็ตามมันเป็นไปตามอนุสัญญา GNU ทั้งหมดและgetoptมักใช้คำว่า "GNU " (เช่นใน FreeBSD)