Jika Anda menggunakan shell NIX "standar" *, Anda mungkin tidak familiar dengan fitur bash array yang berguna. Meskipun array dalam bash tidak sekeren bahasa P (Perl, Python, dan PHP) dan bahasa pemrograman lainnya, mereka sering kali berguna.
Array Bash hanya memiliki indeks numerik, tetapi bersifat opsional, yaitu Anda tidak harus secara eksplisit menentukan nilai dari semua indeks. Seluruh larik dapat ditentukan dengan memasukkan entri dalam tanda kurung:
arr=(Hello World)
Rekaman individual dapat ditentukan menggunakan sintaks yang sudah dikenal (dari BASIC (maafkan saya Dijkstra - catatan penerjemah) ke Fortran):
arr[0]=Hello
arr[1]=World
Namun, sebaliknya terlihat relatif lebih jelek. Jika Anda perlu merujuk ke entri tertentu, maka:
echo ${arr[0]} ${arr[1]}
Dari halaman manual:
" Tanda kurung kurawal diperlukan untuk mencegah konflik saat memperluas jalur lengkap ke file. "
Selain itu, tersedia konstruksi aneh berikut:
${arr[*]} #
${!arr[*]}#
${#arr[*]}#
${#arr[0]}# ( )
$ {! arr [*]} adalah tambahan yang relatif baru untuk bash dan bukan bagian dari implementasi asli. Konstruksi berikut menunjukkan contoh penggunaan larik sederhana. Perhatikan "[indeks] = nilai", ini memungkinkan Anda untuk menetapkan nilai tertentu ke nomor catatan tertentu.
#!/bin/bash
array=(one two three four [5]=five)
echo "Array size: ${#array[*]}" #
echo "Array items:" #
for item in ${array[*]}
do
printf " %s\n" $item
done
echo "Array indexes:" #
for index in ${!array[*]}
do
printf " %d\n" $index
done
echo "Array items and indexes:" #
for index in ${!array[*]}
do
printf "%4d: %s\n" $index ${array[$index]}
done
Menjalankan skrip akan menghasilkan output berikut:
Ukuran array: 5
Item array:
satu
dua
tiga
empat
lima
Indeks Array:
0
1
2
3
5
Item dan indeks array:
0: satu
1: dua
2: tiga
3: empat
5: lima
Perhatikan bahwa karakter "@" dapat digunakan sebagai pengganti "*" dalam konstruksi seperti {arr [*]}, hasilnya akan sama kecuali untuk perluasan entri yang dikutip. "$ *" dan "$ @" akan mengembalikan entri yang dikutip, "$ {arr [*]}" akan mengembalikan setiap entri sebagai satu kata, "$ {arr [@]}" akan mengembalikan setiap entri sebagai kata terpisah.
Contoh berikut akan menunjukkan bagaimana kutipan dan konstruksi tanpa tanda kutip mengembalikan string (terutama penting ketika string ini berisi spasi):
#!/bin/bash
array=("first item" "second item" "third" "item")
echo "Number of items in original array: ${#array[*]}"
for ix in ${!array[*]}
do
printf " %s\n" "${array[$ix]}"
done
echo
arr=(${array[*]})
echo "After unquoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
printf " %s\n" "${arr[$ix]}"
done
echo
arr=("${array[*]}")
echo "After * quoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
printf " %s\n" "${arr[$ix]}"
done
echo
arr=("${array[@]}")
echo "After @ quoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
printf " %s\n" "${arr[$ix]}"
done
Output pada startup:
Jumlah item dalam array asli: 4
item pertama
item kedua
ketiga
barang
Setelah ekspansi kuotasi: 6
pertama
butir
kedua
butir
ketiga
barang
Setelah ekspansi * dikutip: 1
item pertama item kedua item yang ketiga
Setelah @ ekspansi dikutip: 4
pertama Item
kedua Item
ketiga
Item