/bin/sh
hampir tidak pernah menjadi shell Bourne pada sistem apa pun saat ini (bahkan Solaris yang merupakan salah satu sistem utama terakhir yang menyertakannya kini telah beralih ke POSIX sh untuk / bin / sh di Solaris 11). /bin/sh
adalah cangkang Thompson di awal 70-an. Shell Bourne menggantinya di Unix V7 pada tahun 1979.
/bin/sh
telah menjadi cangkang Bourne selama bertahun-tahun sesudahnya (atau cangkang Almquist, implementasi ulang gratis pada BSD).
Saat ini, /bin/sh
lebih umum penerjemah atau yang lain untuk sh
bahasa POSIX yang itu sendiri didasarkan pada subset dari bahasa ksh88 (dan superset dari bahasa shell Bourne dengan beberapa ketidakcocokan).
Shell Bourne atau spesifikasi bahasa POSIX sh tidak mendukung array. Atau lebih tepatnya mereka hanya memiliki satu array: parameter posisi ( $1
, $2
, $@
, sehingga array satu per fungsi juga).
ksh88 memang memiliki array yang Anda set dengan set -A
, tetapi itu tidak bisa ditentukan dalam POSIX sh karena sintaksinya canggung dan tidak bisa digunakan.
Kerang lain dengan variabel array / daftar meliputi: csh
/ tcsh
, rc
, es
, bash
(yang sebagian besar disalin sintaks ksh cara ksh93), yash
, zsh
, fish
masing-masing dengan sintaks yang berbeda ( rc
cangkang sekali to-be penerus Unix, fish
dan zsh
yang paling konsisten yang) ...
Dalam standar sh
(juga berfungsi dalam versi modern dari shell Bourne):
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)
(perhatikan bahwa di shell Bourne dan ksh88, $IFS
harus berisi karakter spasi untuk "$@"
berfungsi dengan benar (bug), dan di shell Bourne, Anda tidak dapat mengakses elemen di atas $9
( ${10}
tidak akan berfungsi, Anda masih bisa melakukan shift 1; echo "$9"
atau mengulang mereka)).