GNU/Linux >> Belajar Linux >  >> Linux

Array Di Unix Bourne Shell?

Saya mencoba menggunakan array di Bourne Shell (/bin/sh ). Saya menemukan bahwa cara untuk menginisialisasi elemen array adalah:

arr=(1 2 3)

Namun mengalami kesalahan:

syntax error at line 8: `arr=' unexpected

Sekarang posting di mana saya menemukan sintaks ini mengatakan itu untuk bash , tetapi saya tidak dapat menemukan sintaks terpisah untuk Bourne Shell. Apakah sintaksnya sama untuk /bin/sh juga?

Jawaban yang Diterima:

/bin/sh hampir tidak pernah merupakan 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 menggantikannya di Unix V7 pada 1979.

/bin/sh telah menjadi shell Bourne selama bertahun-tahun setelahnya (atau shell Almquist, implementasi ulang gratis pada BSD).

Saat ini, /bin/sh lebih umum seorang juru bahasa atau lainnya untuk POSIX sh bahasa yang didasarkan pada subset dari bahasa ksh88 (dan superset dari bahasa shell Bourne dengan beberapa inkompatibilitas).

Bourne shell atau spesifikasi bahasa POSIX sh tidak mendukung array. Atau lebih tepatnya mereka hanya memiliki satu larik:parameter posisi ($1 , $2 , [email protected] , jadi satu larik per fungsi juga).

ksh88 memang memiliki array yang Anda atur dengan set -A , tapi itu tidak ditentukan dalam POSIX sh karena sintaksnya canggung dan tidak terlalu berguna.

Shell lain dengan variabel array/daftar termasuk:csh /tcsh , rc , es , bash (yang sebagian besar menyalin sintaks ksh dengan cara ksh93), yash , zsh , fish masing-masing dengan sintaks yang berbeda (rc cangkang calon penerus Unix, fish dan zsh menjadi yang paling konsisten)…

Dalam standar sh (juga berfungsi di shell Bourne versi modern):

set '1st element' 2 3 # setting the array

set -- "[email protected]" more # adding elements to the end of the array

shift 2 # removing elements (here 2) from the beginning of the array

printf '<%s>n' "[email protected]" # passing all the elements of the [email protected] array 
                     # as arguments to a command

for i do # looping over the  elements of the [email protected] array ($1, $2...)
  printf 'Looping over "%s"n' "$i"
done

printf '%sn' "$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 (except zsh, when not in sh emulation and
                   # most ash-based shells).

printf '%sn' "$# elements in the array"

printf '%sn' "$*" # 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 Bourne shell dan ksh88, $IFS harus berisi karakter spasi untuk "[email protected]" untuk bekerja dengan baik (bug), dan di shell Bourne, Anda tidak dapat mengakses elemen di atas $9 (${10} tidak akan bekerja, Anda masih dapat melakukan shift 1; echo "$9" atau loop di atasnya)).

Terkait:Apakah $SHELL menyimpan path ke shell default di Linux?
Linux
  1. Tip Unix Shell:Ubah Shell Login Dari Bash ke Lainnya

  2. TMOUT – Secara Otomatis Keluar dari Unix Shell Saat Tidak Ada Aktivitas

  3. Bagaimana cara ftp dan Mengunduh file dari Skrip Shell UNIX?

  1. Array Asosiatif Dalam Skrip Shell?

  2. Menggunakan Tombol Vi Untuk Mengedit Perintah Shell Di Unix?

  3. Bagaimana cara menjalankan skrip shell di konsol Unix atau terminal Mac?

  1. 4 Cara Mengeksekusi Shell Script di UNIX / Linux

  2. 3 Skrip Unix Shell – Aktivitas Pengguna, Lihat Proses, Tampilkan Memori

  3. UNIX / Linux :Apa itu Shell? Apa Shells yang berbeda?