Global variables can be accessed in bash function without declaring anything and when these are modified the behaviour depend on whether function is called in sub-shell mode or inline mode. Sub-shell mode can be called with $(func_name)
and inline can be just called with func_name
. In sub-shell mode variables modified inside don’t impact variables outside with same name.
#!/bin/bash f1 () { echo "in f1 x=$x" x=2 } x=1 f1 echo "after call x=$x" x=1 ret=$(f1) echo "ret=$ret" echo "after call x=$x"
in f1 x=1 after call x=2 ret=in f1 x=1 after call x=1
Env: GNU bash, version 4.2.46
Note that in sub-shell mode, echo output is not printed on stdout.