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

Reply via email to