[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: hi, this is student studying bash. (typeset question)
From: |
Greg Wooledge |
Subject: |
Re: hi, this is student studying bash. (typeset question) |
Date: |
Tue, 29 Sep 2020 07:42:40 -0400 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Tue, Sep 29, 2020 at 12:40:36PM +0900, ironhopper@projfrom.me wrote:
> Dear gnu team.
>
> hi, I'm studying embedded system and bash these days.
> but little confusing about type system.
> where is integer type definition code?
Even when a variable is declared with the -i flag, it is not *stored*
as an integer. It's still stored as a string, just with this additional
flag attached to it.
> I read linux documentation project's docs.
> doc1. https://tldp.org/LDP/abs/html/untyped.html
> doc2. https://tldp.org/LDP/abs/html/declareref.html
> doc3. https://tldp.org/LDP/abs/html/ops.html
The "abs" is considered a rather poor source of information. It contains
many errors.
> Integer variables in older versions of Bash were signed long (32-bit)
> integers, in the range of -2147483648 to 2147483647. An operation that took
> a variable outside these limits gave an erroneous result.
What you're talking about here applies to integer *arithmetic* performed
by bash, and it's partially correct. When bash does integer arithmetic,
it uses signed variables, of type intmax_t (formerly long, as you said,
but that was before version 2.05b).
Basically, any time there is arithmetic to be done, the following happens:
1) All the strings get converted to numbers by recursive expansion. If
a given string contains only digits (and optional leading +/- sign),
it gets converted to intmax_t and this piece of the recursive
expansion is done. Otherwise, if the string contains something
which is a valid shell variable name, it's treated as a variable,
and that variable's value is expanded as an arithmetic expression.
A shell variable with an empty value (or an unset variable) is treated
as zero in this context.
2) The desired arithmetic operations are performed on the internal intmax_t
variables.
3) The final result is converted to a string, to be used wherever the
result of the arithmetic is needed.
> the question is
> <strong> where can I find integer type definition code? <strong>
That part, I do not know.