Re: [PATCH] Supplant the "while case ... break ;; esac" idiom
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:36
David Kastrup [off-list ref] writes:
A lot of shell scripts contained stuff starting with while case "$#" in 0) break ;; esac and similar. I consider breaking out of the condition instead of the body od the loop ugly, and the implied "true" value of the non-matching case is not really obvious to humans at first glance. It happens not to be obvious to some BSD shells, either, but that's because they are not POSIX-compliant. In most cases, this has been replaced by a straight condition using "test". "case" has the advantage of being faster than "test" on vintage shells where "test" is not a builtin. Since none of them is likely to run the git scripts, anyway, the added readability should be worth the change. A few loops have had their termination condition expressed differently. Signed-off-by: David Kastrup <redacted> --- Ok, this is not really what we have been talking about except in one case, but I think it is actually more of an improvement.
Gaah, didn't I say I do NOT think it is an improvement?
I consider breaking out of the condition instead of the body od the loop ugly,
Well, as we all know that we disagree on this point, stating what you consider one-sidedly here is quite inappropriate.
and the implied "true" value of the non-matching case is not really obvious to humans at first glance.
It is more like "if you do not know shell". In other words, I am somewhat disgusted with the first part of your proposed commit log message, although I like what the patch does ;-).
-while case "$#" in 0) break ;; esac
+while test "$#" != 0
do
case "$1" in
-a)And let's not quote "$#".