/bin/sh
günümüzde hiçbir sistemde neredeyse hiç Bourne kabuğu bulunmuyor (dahil edilmesi gereken son büyük sistemlerden biri olan Solaris bile, Solaris 11'deki / bin / sh için POSIX koduna geçti). /bin/sh
70'lerin başında Thompson kabuğu oldu. Bourne kabuğu 1979'da Unix V7'de yerini aldı.
/bin/sh
Bundan sonra yıllarca Bourne kabuğu (veya BSK'lar için ücretsiz bir yeniden uygulama olan Almquist kabuğu).
Günümüzde, /bin/sh
daha çok sh
ksh88 dilinin (ve bazı uyumsuzluklarla Bourne kabuk diline ait bir süpersetin) alt kümesine dayanan POSIX dili için bir tercüman veya başka bir dildir.
Bourne kabuğu veya POSIX sh dil özelliği, dizileri desteklemiyor. Ya da daha doğrusu sadece tek dizi var: konumsal parametreler ( $1
, $2
, $@
, işlevi başına bir dizide bu kadar sıra).
ksh88 ayarladığınız dizilere sahipti set -A
, ancak sözdizimi garip ve çok kullanışsız olduğu için POSIX sh de belirtilmemiş.
Dizi / listeleri değişkenlerle diğer kabukları içerir: csh
/ tcsh
, rc
, es
, bash
(çoğunlukla Ksh sözdizimini ksh93 şekilde kopyalanır olan), yash
, zsh
, fish
farklı sözdizimi (her rc
Unix için sözde bir kez halefi kabuk, fish
ve zsh
en tutarlı olmak olanlar) ...
Standart olarak sh
(Bourne kabuğunun modern versiyonlarında da çalışır):
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)
(Bourne kabuğunda ve ksh88'de, düzgün çalışması $IFS
için boşluk karakterini içermesi gerektiğini unutmayın "$@"
(bir hata) ve Bourne kabuğunda, yukarıdaki öğelere erişemezsiniz $9
( ${10}
işe yaramaz, hala yapabilir shift 1; echo "$9"
ya da tekrar onları)).