/bin/sh
ngày nay hầu như không phải là vỏ Bourne trên bất kỳ hệ thống nào (ngay cả Solaris, một trong những hệ thống lớn cuối cùng bao gồm nó giờ đã chuyển sang sh POSIX cho / bin / sh trong Solaris 11). /bin/sh
là vỏ của Thompson vào đầu những năm 70. Shell Bourne đã thay thế nó trong Unix V7 vào năm 1979.
/bin/sh
đã là vỏ Bourne trong nhiều năm sau đó (hay vỏ Almquist, một sự tái hiện miễn phí trên BSD).
Ngày nay, /bin/sh
thông thường là một trình thông dịch hoặc sh
ngôn ngữ khác cho ngôn ngữ POSIX , bản thân nó dựa trên một tập hợp ngôn ngữ của ksh88 (và một siêu ngôn ngữ của ngôn ngữ shell Bourne với một số điểm không tương thích).
Trình bao Bourne hoặc đặc tả ngôn ngữ sh POSIX không hỗ trợ mảng. Hay đúng hơn là họ chỉ có một mảng: các tham số vị trí ( $1
, $2
, $@
, vì vậy một mảng mỗi chức năng cũng).
ksh88 đã có các mảng mà bạn thiết lập set -A
, nhưng điều đó không được chỉ định trong POSIX sh vì cú pháp rất khó xử và không sử dụng được.
Vỏ khác với các biến mảng / danh sách bao gồm: csh
/ tcsh
, rc
, es
, bash
(mà chủ yếu là sao chép cú pháp ksh cách ksh93), yash
, zsh
, fish
mỗi với một cú pháp khác nhau ( rc
vỏ của một lần to-be kế của Unix, fish
và zsh
là phù hợp nhất những cái) ...
Trong tiêu chuẩn sh
(cũng hoạt động trong các phiên bản hiện đại của vỏ 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)
(lưu ý rằng trong vỏ Bourne và ksh88, $IFS
phải chứa ký tự khoảng trắng "$@"
để hoạt động chính xác (một lỗi) và trong vỏ Bourne, bạn không thể truy cập các phần tử ở trên $9
( ${10}
sẽ không hoạt động, bạn vẫn có thể thực hiện shift 1; echo "$9"
hoặc lặp lại họ)).