Array Bash

Ini adalah terjemahan " Bash Arrays " Mitch Frazier dari linuxjournal.com.



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



All Articles