/bin/sh
แทบจะไม่เคยเป็นเชลล์เป้าหมายในระบบใด ๆ ในปัจจุบัน (แม้แต่โซลาริสซึ่งเป็นหนึ่งในระบบหลักสุดท้ายที่รวมไว้ในตอนนี้ได้เปลี่ยนเป็น POSIX sh สำหรับ / bin / sh ใน Solaris 11) /bin/sh
เป็นเปลือกของ ธ อมป์สันในต้นปี 70 เชลล์เป้าหมายถูกแทนที่ใน Unix V7 ในปี 1979
/bin/sh
เป็นบอร์นเชลล์เป็นเวลาหลายปีหลังจากนั้น (หรือ Almquist shell ซึ่งเป็นการนำมาใช้ใหม่ฟรีบน BSD)
ทุกวันนี้/bin/sh
มักจะเป็นล่ามหรือภาษาอื่นสำหรับsh
ภาษาPOSIX ซึ่งมีพื้นฐานมาจากชุดย่อยของภาษา ksh88 (และเซ็ตของภาษาเชลล์บอร์นที่มีความเข้ากันไม่ได้)
เชลล์เป้าหมายหรือข้อกำหนดภาษา POSIX sh ไม่สนับสนุนอาร์เรย์ หรือมากกว่าที่พวกเขามีเพียงหนึ่งอาร์เรย์: พารามิเตอร์ตำแหน่ง ( $1
, $2
, $@
ดังนั้นหนึ่งอาร์เรย์ต่อฟังก์ชั่นเช่นกัน)
ksh88 มีอาร์เรย์ที่คุณตั้งค่าไว้set -A
แต่นั่นไม่ได้ระบุใน POSIX sh เนื่องจากไวยากรณ์นั้นอึดอัดและไม่สามารถใช้งานได้มาก
เปลือกหอยอื่น ๆ ที่มีตัวแปรอาร์เรย์ / รายการรวมถึง: csh
/ tcsh
, rc
, es
, bash
(ซึ่งคัดลอกส่วนใหญ่ไวยากรณ์ ksh วิธี ksh93), การyash
, zsh
, fish
แต่ละคนมีไวยากรณ์ที่แตกต่างกัน ( rc
เปลือกของครั้งหนึ่งที่ไปเป็นตัวตายตัวแทนของยูนิกซ์, fish
และzsh
เป็นสอดคล้องกันมากที่สุด คน) ...
ตามมาตรฐานsh
(ใช้ได้กับเชลล์เป้าหมายรุ่นปัจจุบันด้วย):
set '1st element' 2 3 # setting the array
set -- "$@" more # adding elements to the end of the array
shift 2 # removing elements (here 2) from the beginning of the array
printf '<%s>\n' "$@" # passing all the elements of the $@ array
# as arguments to a command
for i do # looping over the elements of the $@ array ($1, $2...)
printf 'Looping over "%s"\n' "$i"
done
printf '%s\n' "$1" # accessing individual element of the array.
# up to the 9th only with the Bourne shell though
# (only the Bourne shell), and note that you need
# the braces (as in "${10}") past the 9th in other
# shells.
printf '%s\n' "$# elements in the array"
printf '%s\n' "$*" # join the elements of the array with the
# first character (byte in some implementations)
# of $IFS (not in the Bourne shell where it's on
# space instead regardless of the value of $IFS)
(โปรดทราบว่าในเชลล์เป้าหมายและ ksh88 $IFS
ต้องมีอักขระช่องว่างสำหรับ"$@"
การทำงานอย่างถูกต้อง (ข้อผิดพลาด) และในเชลล์เป้าหมายคุณไม่สามารถเข้าถึงองค์ประกอบด้านบน$9
( ${10}
ไม่ทำงานคุณยังสามารถทำได้shift 1; echo "$9"
หรือวนซ้ำ พวกเขา))