นั่นเริ่มต้นเป็นแฮ็คในเชลล์เป้าหมาย ในเชลล์เป้าหมายการแยกคำ IFS เสร็จแล้ว (หลังจาก tokenisation) กับทุกคำในบริบทรายการ (อาร์กิวเมนต์บรรทัดคำสั่งหรือคำที่forลูปวนบน) ถ้าคุณมี:
IFS=i var=file2.txt
edit file.txt $var
ที่บรรทัดที่สองจะ tokenised ใน 3 คำ$varจะขยายและแยก + glob จะทำในทุกสามคำดังนั้นคุณจะสิ้นสุดการทำงานedกับt, f, le.txt, f, le2.txtเป็นข้อโต้แย้ง
การอ้างถึงบางส่วนของสิ่งนั้นจะป้องกัน + + glob แยก เชลล์เป้าหมายในขั้นต้นจำได้ว่าอักขระตัวใดที่อ้างถึงโดยตั้งค่าบิตที่ 8 ไว้ภายใน (ซึ่งเปลี่ยนในภายหลังเมื่อ Unix กลายเป็น 8 บิตที่สะอาด
ทั้งสอง$*และ$@เป็นการต่อกันของพารามิเตอร์ตำแหน่งกับช่องว่างระหว่าง แต่มีการประมวลผลพิเศษ$@เมื่ออยู่ในเครื่องหมายคำพูดคู่ หาก$1มีfoo barและ$2มีอยู่baz, "$@"จะขยายไปยัง:
foo bar baz
^^^^^^^ ^^^
(ด้วย^s ด้านบนแสดงว่าอักขระตัวใดมีชุดบิตที่ 8) โดยที่ช่องว่างแรกถูกยกมา (มีชุดบิตที่ 8) แต่ไม่ใช่ช่องว่างที่สอง (อันที่เพิ่มเข้ามาระหว่างคำ)
และมันคือการแยก IFS ที่ดูแลการแยกอาร์กิวเมนต์ (สมมติว่าอักขระช่องว่างอยู่ใน$IFSตามที่เป็นค่าเริ่มต้น) นั่นคล้ายกับวิธีการ$*ขยายในรุ่นก่อนหน้าของเปลือก Mashey (ตัวเองขึ้นอยู่กับเปลือก Thomson ในขณะที่เชลล์เป้าหมายถูกเขียนขึ้นจากรอยขีดข่วน)
ที่อธิบายว่าทำไมในบอร์นเปลือกแรก"$@"จะขยายตัวเป็นสตริงว่างแทนอะไรเลยเมื่อรายการของพารามิเตอร์ตำแหน่งว่างเปล่า (คุณต้องทำงานไปรอบ ๆ ด้วย${1+"$@"}) ทำไมมันไม่ได้เก็บพารามิเตอร์ตำแหน่งที่ว่างเปล่าและทำไม"$@"didn ไม่ทำงานเมื่อ$IFSไม่มีอักขระเว้นวรรค
ความตั้งใจที่จะสามารถส่งผ่านรายการของอาร์กิวเมนต์คำต่อคำไปยังคำสั่งอื่น แต่ไม่ได้ทำงานอย่างถูกต้องสำหรับรายการที่ว่างเปล่าสำหรับองค์ประกอบที่ว่างเปล่าหรือเมื่อ$IFSไม่ได้มีช่องว่าง (สองประเด็นแรกถูกแก้ไขในรุ่นต่อมาในที่สุด )
Korn เชลล์ (ซึ่งอิงกับ POSIX spec) เปลี่ยนพฤติกรรมดังกล่าวในสองสามวิธี:
- การแยก IFS ทำได้เฉพาะกับผลลัพธ์ของการขยายที่ไม่ได้ยกมา (ไม่ใช่คำที่เป็นตัวอักษรเช่น
editหรือfile.txtในตัวอย่างด้านบน) 
$*และ$@ถูกรวมเข้ากับอักขระตัวแรกของ$IFSหรือช่องว่างเมื่อ$IFSว่างเปล่ายกเว้นเครื่องหมาย"$@"อัญประกาศตัวเชื่อมนั้นไม่ถูกยกมาเหมือนในเชลล์เป้าหมายและสำหรับการอ้างอิง"$*"เมื่อIFSว่างเปล่าพารามิเตอร์ตำแหน่งจะถูกต่อท้ายโดยไม่มีตัวคั่น 
- มันเพิ่มการสนับสนุนสำหรับอาร์เรย์และ
${array[@]} ${array[*]}เตือนความทรงจำของ Bourne $*และ$@แต่เริ่มต้นที่ดัชนี 0 แทนที่จะเป็น 1 และกระจัดกระจาย (เช่นเชื่อมโยงอาร์เรย์) ซึ่งหมายความว่า$@ไม่สามารถถือว่าเป็นอาร์เรย์ ksh จริงๆ (เปรียบเทียบกับcsh/ rc/ zsh/ fish/ yashที่ไหน$argv/ $*เป็นปกติ อาร์เรย์) 
- องค์ประกอบที่ว่างเปล่าจะถูกเก็บรักษาไว้
 
"$@"เมื่อ$#เป็น 0 ตอนนี้ขยายเป็นไม่มีอะไรแทนสตริงว่าง"$@"ทำงานเมื่อ$IFSไม่มีช่องว่างยกเว้นเมื่อIFSว่างเปล่า unquote ที่$*ไม่มี wildcard จะขยายเป็นหนึ่งอาร์กิวเมนต์ (โดยที่พารามิเตอร์ตำแหน่งถูกรวมเข้ากับช่องว่าง) เมื่อ$IFSว่างเปล่า 
ksh93 แก้ไขปัญหาบางอย่างที่เหลืออยู่ด้านบน ใน ksh93, $*และ$@ขยายไปยังรายการของพารามิเตอร์ตำแหน่งที่แยกออกจากกันโดยไม่คำนึงถึงความคุ้มค่าของ$IFSแล้วแยกเพิ่มเติม + globbed + รั้งขยายตัวในบริบทรายการ$*ร่วมกับครั้งแรกไบต์ (ไม่ใช่ตัวอักษร) ของ$IFS, "$@"ในรายการบริบทขยายไปยังรายการ $IFSของพารามิเตอร์ตำแหน่งโดยไม่คำนึงถึงความคุ้มค่าของ ในบริบทที่ไม่ใช่รายการเหมือนในvar=$@, จะเข้าร่วมกับพื้นที่โดยไม่คำนึงถึงความคุ้มค่าของ$@$IFS
bashอาร์เรย์ของถูกออกแบบมาหลังจาก ksh ความแตกต่างคือ:
- ไม่มีการขยายรั้งเมื่อการขยายที่ไม่ได้กล่าวถึง
 
- อักขระตัวแรกของ
$IFSแทนไบต์ 
- ความแตกต่างของมุมกรณีบางอย่างเช่นการขยายตัวของ
$*เมื่อไม่อ้างถึงในบริบทที่ไม่ใช่รายการเมื่อ$IFSว่างเปล่า 
ในขณะที่ข้อมูลจำเพาะ POSIX เคยเป็นค่อนข้างคลุมเครือตอนนี้มันมากหรือน้อยระบุพฤติกรรมทุบตี
มันแตกต่างจากอาร์เรย์ปกติในkshหรือbashที่:
- ดัชนีเริ่มต้นที่ 1 แทน 0 (ยกเว้น
"${@:0}"ซึ่งรวมถึง$0(ไม่ใช่พารามิเตอร์ตำแหน่งและในฟังก์ชั่นให้ชื่อของฟังก์ชั่นหรือไม่ขึ้นอยู่กับเปลือกและวิธีการกำหนดฟังก์ชั่น) 
- คุณไม่สามารถกำหนดองค์ประกอบเป็นรายบุคคล
 
- มันไม่กระจัดกระจายคุณไม่สามารถแยกองค์ประกอบได้ทีละรายการ
 
shift สามารถใช้ได้. 
ในzshหรือyashที่อาร์เรย์เป็นอาร์เรย์ปกติ (ไม่กระจัดกระจายดัชนีเริ่มต้นที่หนึ่งเหมือนในเปลือกอื่น ๆ ทั้งหมด แต่ ksh / bash) $*จะถือว่าเป็นอาร์เรย์ปกติ zshมี$argvเป็นนามแฝงสำหรับมัน (เพื่อความเข้ากันได้กับcsh) $*เหมือนกับ$argvหรือ${argv[*]}(อาร์กิวเมนต์เข้าร่วมกับอักขระตัวแรกของ$IFSแต่ยังแยกออกในบริบทรายการ) "$@"ชอบ"${argv[@]}"หรือ"${*[@]}"}ผ่านกระบวนการพิเศษในสไตล์กร