* Stefano Lattarini wrote on Sun, Aug 08, 2010 at 07:09:46PM CEST: > At Sunday 08 August 2010, Ralf Wildenhues wrote: > > * Stefano Lattarini wrote on Sun, Aug 08, 2010 at 06:22:00PM CEST: > > > Exactly! So: > > > foo() { foo_result=`sed ...`; } > > > foo; bar=$foo_result; > > > > > > instead of: > > > foo() { sed ...; } > > > bar=`foo` > > > > > > Where is the significant improvement? > > > > Two forks vs. one: the latter still forks right before exec'ing > > sed. > And the first doesn't?
For some shells, that is correct. Your questioning prompted me to try it out, to make sure I'm not telling anything wrong here. So, with bash 3.2.39 on GNU/Linux, the first of the scripts below calls clone once, the second twice, as strace -fF tells me. Cheers, Ralf --- script 1 --- #! /bin/sh foo () { result=`sed -n 1p $0`; } foo echo $result --- script 2 --- #! /bin/sh foo () { sed -n 1p $0; } result=`foo` echo $result