Setelah membaca 24.2. Variabel Lokal , saya berpikir bahwa mendeklarasikan variabel var
dengan kata kunci local
berarti bahwa var
nilai hanya dapat diakses dalam blok kode yang dibatasi oleh kurung kurawal suatu fungsi.
Namun, setelah menjalankan contoh berikut, saya menemukan bahwa var
juga dapat diakses, dibaca dan ditulis dari fungsi dipanggil oleh blok kode - yaitu meskipun var
dinyatakan local
untuk outerFunc
, innerFunc
masih bisa membacanya dan mengubah nilainya.
#!/usr/bin/env bash
function innerFunc() {
var='new value'
echo "innerFunc: [var:${var}]"
}
function outerFunc() {
local var='initial value'
echo "outerFunc: before innerFunc: [var:${var}]"
innerFunc
echo "outerFunc: after innerFunc: [var:${var}]"
}
echo "global: before outerFunc: [var:${var}]"
outerFunc
echo "global: after outerFunc: [var:${var}]"
Keluaran:
global: before outerFunc: [var:] # as expected, `var` is not accessible outside of `outerFunc`
outerFunc: before innerFunc: [var:initial value]
innerFunc: [var:new value] # `innerFunc` has access to `var` ??
outerFunc: after innerFunc: [var:new value] # the modification of `var` by `innerFunc` is visible to `outerFunc` ??
global: after outerFunc: [var:]
T: Apakah itu bug di shell saya (bash 4.3.42, Ubuntu 16.04, 64bit) atau apakah itu perilaku yang diharapkan?
EDIT: Dipecahkan. Seperti dicatat oleh @MarkPlotnick, ini memang perilaku yang diharapkan.
var
kosong? var
diatur secara global innerFunc
, jadi mengapa tidak tetap sampai akhir skrip?