From: Junio C Hamano Date: Fri, 28 Jun 2019 18:05:03 GMT Subject: Re: [PATCH 1/6] test-lib: introduce test_commit_bulk Message-ID: In-Reply-To: <2d4410a9-fd3e-8b9f-00b5-f8eba4d51b42@gmail.com> Derrick Stolee writes: > way to do this loop. The top thing on my mind are the 'eval "echo X"' > lines. If they start processes, then we can improve the performance. > If not, then it may not be worth it. Sigh. Do you mean 'echo' run inside 'eval' is one extra process? In most modern shells, it is a built-in and you need another process. Do you mean 'eval' running anything is one extra process? Because anything done inside eval must be visible to the shell running it, e.g. var=myvar; eval "$var=val" would evaluate string 'myvar=val' inside that shell itself and it must be able to update the value of $myvar, whatever it does must not add any extra process. The primary reason why the loop in question uses eval is to allow the callers to pass $n in single-quote to have it interpolated lazily. message='message $n' for n in 1 2 3 do echo "$message" eval "echo \"$message\"" done Each iteration, the first line gives message $n which is the thing that gets passed to 'echo' in the second line, so you'll see message $n message 1 message $n message 2 message $n message 3 as the result.