Array di Bourne Shell (sh)

Di setiap bahasa pemrograman maupun bahasa scripting, umumnya ada fitur untuk menyimpan beberapa data dalam satu variable yaitu array. Tidak terkecuali Shell seperti Bash, Zsh, dll.

Bash logo

Namun di POSIX-compliant Shell (/bin/sh) atau Dash, array tidak masuk di spesifikasi. Script yang ditulis dengan /bin/sh biasanya akan compatible dengan /bin/bash, dan tidak sebaliknya.

Kita bisa membuat array, sekaligus iterasi di Bash seperti ini:

  1. #!/bin/bash 
  2.  
  3. buah=( apel jeruk mangga melon pisang ) 
  4.  
  5. for b in "${buah[@]}"; do 
  6.     echo "$b" 
  7. done 

Jika kita jalankan menggunakan interpreter /bin/sh akan error:

Syntax error: "(" unexpected

Tenang, karena di sh tidak bisa menggunakan array, bukan tidak mungkin membuat struktur data yang menyerupai array:

  1. #!/bin/sh 
  2.  
  3. buah="apel jeruk mangga melon pisang" 
  4.  
  5. for b in $buah; do 
  6.     echo "$b" 
  7. done 

Dengan script sh diatas, /bin/sh bisa diganti /bin/bash dengan aman, karena sekali lagi, sh compatible dengan Bash.

Kalo dilihat antara versi Bash dengan sh, terdapat perbedaan menarik yaitu ${buah[@]} dan $buah yang digunakan pada iterasi menggunakan for. Sebenarnya jika kita echo, kedua outputnya adalah sama yaitu hanya string biasa yang dipisahkan dengan spasi:

"apel jeruk mangga melon pisang"

Jika pemisahnya bukan spasi, kita bisa menggunakan IFS (Internal Field Separator) dengan format IFS="pemisah". Kedua contoh diatas bisa berfungsi tanpa set IFS, karena standar IFS adalah semua whitespace termasuk spasi.

Perhatikan script berikut:

  1. IFS=: 
  2.  
  3. for buah in apel:mangga:melon:jeruk:pisang; do 
  4.     printf '%s ' $buah 
  5. done 

Karena pemisahnya adalah titik dua (:) atau bukan spasi, bisa tanpa quote (").

Hasil: "apel jeruk mangga melon pisang ".

Tentu implementasi array di sh memungkinkan tetapi di beberapa kasus bisa lebih tricky.

Part 2: Array Push di Bash dan sh.

#Shell #Bash #POSIX