Pointer (ke lokasi memori ) sebenarnya bukan konsep yang berguna dalam tingkat apa pun yang lebih tinggi dari C, baik itu sesuatu seperti Python atau shell. Referensi ke objek tentu saja berguna dalam bahasa tingkat tinggi, bahkan mungkin diperlukan untuk membangun struktur data yang kompleks. Tetapi dalam kebanyakan kasus berpikir dalam hal alamat memori level terlalu rendah untuk menjadi sangat berguna.
Di Bash (dan shell lainnya), Anda bisa mendapatkan nilai elemen array dengan ${array[index]}
notasi, menugaskannya, array[index]=...
dan mendapatkan jumlah elemen dengan array ${#array[@]}
. Ekspresi di dalam kurung adalah ekspresi aritmatika. Sebagai contoh buatan, kita bisa menambahkan awalan konstan ke semua anggota array:
for ((i=0 ; i < ${#array[@]} ; i++ )) ; do
array[i]="foo-${array[i]}"
done
(Jika kita hanya peduli dengan nilai, dan bukan indeks, adil for x in "${array[@]}" ; do...
akan baik-baik saja.)
Dengan array asosiatif atau jarang , loop numerik tidak masuk akal, tetapi sebaliknya kita perlu mengambil kunci array / indeks dengan ${!array[@]}
. Misalnya
declare -A assoc=([foo]="123" [bar]="456")
for i in "${!assoc[@]}" ; do
echo "${assoc[$i]}"
done
Selain itu, Bash memiliki dua cara untuk menunjuk secara tidak langsung ke variabel lain:
- ekspansi tidak langsung , menggunakan para
${!var}
sintaks , yang menggunakan nilai dari variabel yang nama adalah divar
, dan
- namerefs , yang perlu dibuat dengan
declare
builtin (atau ksh
sinonim -compatible, typeset
). declare -n ref=var
membuat ref
referensi ke variabel var
.
Namerefs juga mendukung pengindeksan, dalam hal ini jika kita miliki arr=(a b c); declare -n ref=arr;
maka ${ref[1]}
akan diperluas ke b
. Menggunakan ${!p[1]}
sebaliknya akan mengambilp
array, dan merujuk ke variabel yang dinamai oleh elemen kedua.
Dalam Bash, nameref secara harfiah adalah itu, referensi dengan nama , dan menggunakan nameref dari dalam suatu fungsi akan menggunakan nilai lokal dari variabel bernama. Ini akan dicetak local value of var
.
#!/bin/bash
fun() {
local var="local value of var"
echo "$ref";
}
var="global var"
declare -n ref=var
fun
BashFAQ memiliki artikel yang lebih panjang tentang tipuan juga.