On Wed, 27 Jan 2010, Sharuzzaman Ahmat Raslan wrote: > I found the behaviour of the function below is a little bit odd. Appreciate > if someone can share his/her knowledge regarding the behaviour. > > The output of the script will be: > > sharuzza...@debian:~$ ./case1.sh > Nice behaviour, > > Somehow, the backtick for foo() execute the function, echoing the correct > output, but fails to set the variable $gang to the correct value. Because of > that, the function bar() did not echoing anything because the variable $gang > is null. > > I would expect that $gang is set with the correct value and function bar() > will work after that. ... > #startscript---------- > #!/bin/bash > > # test case for variable assignment in string returning function > # case 1: function with echo > > name="optimus" > > foo () { > if [ "$name" = "optimus" ] > then > gang="good" > echo "Nice behaviour" > else > gang="bad" > echo "Naughty behaviour" > fi > } > > bar () { > case "$gang" in > > good) > echo "autobot" > ;; > > bad) > echo "decepticon" > ;; > esac > } > > behaviour=`foo` > group=`bar` > > echo $behaviour,$group > #endscript------------------------
name="optimus" foo () { if [ "$name" = "optimus" ] then gang="good" echo "Nice behaviour" return 0 else gang="bad" echo "Naughty behaviour" return 1 fi } bar () { case "$gang" in good) echo "autobot" return 0 ;; bad) echo "decepticon" return 1 ;; esac } behaviour=`foo` && gang=good || gang=bad group=`bar` && gang=good || gang=bad echo $behaviour,$group -- Chris F.A. Johnson <http://cfajohnson.com> =================================================================== Author: Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress) Pro Bash Programming: Scripting the GNU/Linux Shell (2009, Apress)