On Sat, Jul 12, 2025, at 6:52 PM, Zachary Santer wrote: > let is a builtin, and its argument is always just going to be a > string, so people could continue to form arithmetic expressions at > runtime using that, if they are determined to do so.
((...)) is not the only arithmetic context. The "let" built-in is not a drop-in replacement for, e.g., $((...)). > Recursive evaluation of variables as expressions could live on > there as well. Since when is removal of recursive evaluation being mooted? > And then there's POSIX. Does the Austin Group let the peanut gallery > into their discussions? They do (https://www.opengroup.org/austin/), but given how portable this currently is... % cat /tmp/foo.sh op='||' echo $((1 $op 0)) % bash /tmp/foo.sh 1 % dash /tmp/foo.sh 1 % ksh /tmp/foo.sh 1 % mksh /tmp/foo.sh 1 % oksh /tmp/foo.sh 1 % yash /tmp/foo.sh 1 % zsh /tmp/foo.sh 1 ...achieving consensus to disallow it would be difficult, unless multiple shell developers could be convinced to break backward compatibility. Making it unspecified would be another possibility, but AFAIK no implementations justify this change either. (The ((...)) and "let" commands are not part of the standard.) -- vq