On Thu, Jun 6, 2024 at 6:34 AM Léa Gris <lea.g...@noiraude.net> wrote: > > Le 06/06/2024 à 11:55, Koichi Murase écrivait : > > > Though, I see your point. It is inconvenient that we cannot pass the > > results of arithmetic evaluations to the `printf' builtin. This > > appears to be an issue of the printf builtin. I think the `printf' > > builtin should be extended to interpret both forms of the numbers, the > > locale-dependent formatted number and the floating-point literals. > > Another way would be to expand string representation of floating-point > numbers using the locale.
Parameter transformations could be implemented to serve this purpose. Let's say, if var is in the form of a C floating-point literal, ${var@F} would expand it to the locale-dependent formatted number, for use as an argument to printf or for output directly. And then ${var@f} would go the other way, taking var that's in the form of a locale-dependent formatted number, and expanding it to a C floating-point literal. In this scenario, any floating point numbers ingested by the bash script would be transformed to C floating-point literals before they are referenced or manipulated in an arithmetic context, and then they would be transformed back into the locale-dependent formatted number before being output from the script. Arithmetic evaluation is performed on the right-hand side of an assignment statement assigning to a variable declared with the -i integer attribute. A hypothetical -E floating-point variable attribute in bash should work the same way. As such, a variable with the -E attribute would have to be assigned a value in a format accepted by the arithmetic context, i.e. the C floating-point literal format. So you'd have to do declare -E var="${arg@f}" in order to safely handle the locale-dependent formatted number arg, an argument to the script. Any floating-point literals within the script would have to be formatted as C floating-point literals, at least if they're going to be assigned the -E attribute or used in an arithmetic context. And then you would have to do printf '%f' "${var@F}" to safely output the value using printf. Is that unreasonable? Zack