#!/bin/bash #This simple code demonstrates how to define a function, local and global variables in bash. #And most importantly, how to launch background processes and wait for their termination gvar="Glob value" ncalls=0 avar="Test" # Note for ksh users: in ksh to mark a function definition you should use either function keyword # or () after the function name, not both function a_proc(){ echo ${gvar} local avar=$1 #ksh users: use 'typeset' instead of 'local' echo "Input: ${avar}" sleep 100 avar=$(date) echo "Output: ${avar}" ncalls=$((${ncalls} + 1)) } a_proc "$(date)" & a_proc "$(date)" & a_proc "$(date)" & a_proc "$(date)" & a_proc "$(date)" & a_proc "$(date)" & wait #Although I am trying to update ${ncalls} assuming that this will change my global variable, but ... #This is because I am launching the function in background, which works in a subshell, #so global variables won't be updated echo "ncalls=${ncalls}" echo "avar=${avar}" ##But look what happens with ncalls when launched in foreground a_proc "$(date)" echo "ncalls=${ncalls}" ##Conclusion: the local keyword (for bash, use typeset for ksh) can be useful if you want to make sure that you are not ##changing a global variable in your function