/bin/sh
शायद ही कभी किसी भी सिस्टम पर एक बॉर्न शेल होता है (यहां तक कि सोलारिस जो इसे शामिल करने के लिए अंतिम प्रमुख प्रणाली में से एक था, जो अब सोलिस 11 में अपने / बिन / श के लिए एक पोसिक्स श में बदल गया है)। /bin/sh
70 के दशक की शुरुआत में थॉम्पसन शेल था। 1979 में यूनिक्स V7 में बॉर्न शेल ने इसे बदल दिया।
/bin/sh
उसके बाद कई वर्षों तक बॉर्न शेल रहा (या अल्मक्विस्ट शेल, बीएसडी पर एक मुक्त पुन: कार्यान्वयन)।
आजकल, /bin/sh
अधिक सामान्यतः एक दुभाषिया या पोसिक्स sh
भाषा के लिए एक और है जो स्वयं ksh88 की भाषा के उपसमूह पर आधारित है (और कुछ असंगतताओं के साथ बॉर्न शैल भाषा का एक सुपरसेट)।
बॉर्न शेल या POSIX श भाषा विनिर्देश सरणियों का समर्थन नहीं करते हैं। (स्थितीय पैरामीटर: या बल्कि वे केवल एक सरणी है $1
, $2
, $@
के रूप में है, तो समारोह प्रति एक सरणी में अच्छी तरह से)।
ksh88 के पास एरेज़ थे, जिन्हें आपने सेट किया था set -A
, लेकिन यह POSIX श में निर्दिष्ट नहीं किया गया क्योंकि सिंटैक्स अजीब है और बहुत उपयोग करने योग्य नहीं है।
सरणी / सूचियों चर के साथ अन्य गोले में शामिल हैं: csh
/ tcsh
, rc
, es
, bash
(ज्यादातर ksh93 तरह से कॉपी किया जो ksh वाक्य रचना), 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"
या लूप ओवर कर सकते हैं) उन्हें))।