#!/usr/bin/env bash
# dynamic_scope_demo_fixed.sh
############################
# global variables (all start at 0)
############################
a=0; b=0; c=0; d=0
############################
# g1, g2, g3
############################
g1 () { # g1(int b ; int c)
printf '%d %d %d %d\n' "$a" "$b" "$c" "${d:-0}" }
g2 () { # g2(int a ; int c)
g1 "$a" "$c"
}
g3 () { # g3(int c ; int a)
g1 "$a" "$b" # line 1
( # --- begin inner block in a *sub-shell*
g2 "$a" "$b" # line 2 (d == 4 is visible here)
) # --- end inner block (d & c disappear)
g1 "$a" "$b" # line 3 (d fell back to global 0)
printf '%d\n' "$b" # “return” value }
############################
# main
############################
main () {
a=$(g3 "$b" "$c") # c == 0 (global)
g3 "$b" "$a"
}
main
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIGR5bmFtaWNfc2NvcGVfZGVtb19maXhlZC5zaAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGdsb2JhbCB2YXJpYWJsZXMgKGFsbCBzdGFydCBhdCAwKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmE9MDsgYj0wOyBjPTA7IGQ9MAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGcxLCBnMiwgZzMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpnMSAoKSB7ICAgICAgICAgICAgICAgICAjIGcxKGludCBiIDsgaW50IGMpCiAgICBsb2NhbCBiPSQxIGM9JDIKICAgIHByaW50ZiAnJWQgJWQgJWQgJWRcbicgIiRhIiAiJGIiICIkYyIgIiR7ZDotMH0iCn0KCmcyICgpIHsgICAgICAgICAgICAgICAgICMgZzIoaW50IGEgOyBpbnQgYykKICAgIGxvY2FsIGE9JDEgYz0kMgogICAgZzEgIiRhIiAiJGMiCn0KCmczICgpIHsgICAgICAgICAgICAgICAgICMgZzMoaW50IGMgOyBpbnQgYSkKICAgIGxvY2FsIGM9JDEgYT0kMgogICAgbG9jYWwgYj0zCiAgICBnMSAiJGEiICIkYiIgICAgICAgICMgbGluZSAxCgogICAgKCAgICAgICAgICAgICAgICAgICAjIC0tLSBiZWdpbiBpbm5lciBibG9jayBpbiBhICpzdWItc2hlbGwqCiAgICAgICAgbG9jYWwgYz04CiAgICAgICAgbG9jYWwgZD00CiAgICAgICAgZzIgIiRhIiAiJGIiICAgICMgbGluZSAyICAgKGQgPT0gNCBpcyB2aXNpYmxlIGhlcmUpCiAgICApICAgICAgICAgICAgICAgICAgICMgLS0tIGVuZCBpbm5lciBibG9jayAoZCAmIGMgZGlzYXBwZWFyKQoKICAgIGcxICIkYSIgIiRiIiAgICAgICAgIyBsaW5lIDMgICAoZCBmZWxsIGJhY2sgdG8gZ2xvYmFsIDApCiAgICBwcmludGYgJyVkXG4nICIkYiIgICMg4oCccmV0dXJu4oCdIHZhbHVlCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYWluCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbWFpbiAoKSB7CiAgICBsb2NhbCBhPTQKICAgIGxvY2FsIGI9NQogICAgYT0kKGczICIkYiIgIiRjIikgICAjIGMgPT0gMCAoZ2xvYmFsKQogICAgZzMgIiRiIiAiJGEiCn0KCm1haW4K