[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

**To**:**Robert Elz <kre%munnari.oz.au@localhost>****Subject**:**Re: Proposed updated sh(1) relating to $(( ))****From**:**matthew sporleder <msporleder%gmail.com@localhost>**- Date: Mon, 20 Mar 2017 10:19:59 -0400

On Sat, Mar 18, 2017 at 9:09 PM, Robert Elz <kre%munnari.oz.au@localhost> wrote: > This is what I am proposing to have sh(1) say about arithmetic > expansion ( $(( )) ). Much of it is the same as is there now. > > Any comments? > > Arithmetic Expansion > Arithmetic expansion provides a mechanism for evaluating an arithmetic > expression and substituting its value. The format for arithmetic > expansion is as follows: > > $((expression)) > > The expression is treated as if it were in double quotes, except that a > double quote inside the expression is not treated specially. The shell > expands all tokens in the expression for parameter expansion, command > substitution, and quote removal. > > Next, the shell treats this as an arithmetic expression and substitutes > the value of the expression. > > Arithmetic expressions use a syntax similar to that of the C language, > and are evaluated using the `intmax_t' data type (this is an extension to > POSIX, which requires only `long' arithmetic). Shell variables may be > referenced by name inside an arithmetic expression, without needing a > ``$'' sign. Variables that are not set, or which have an empty (null > string) value, used this way evaluate as zero (that is, ``x'' in > arithmetic, as an R-Value, is evaluated as ``${x:-0}'') unless the sh -u > flag is set, in which case a reference to an unset variable is an error. > Note that unset variables used in the ${var} form expand to a null > string, which might result in syntax errors. Referencing the value of a > variable which is not numeric is an error. > > All of the C expression operators applicable to integers are supported, > and operate as they would in a C expression, except the unary ``++'' and > ``--'' operators (in both prefix and postfix forms) and the ``,'' (comma) > operator, which are currently not supported. It should not be necessary > to state that the C operators which operate on, or produce, pointer > types, are not supported. Those include unary ``*'' and ``&'' and the > struct and array referencing binary operators: ``.'', ``->'' and ``[''. I know it's redundant but because man pages tend to be searched rather than read, I would like to see this paragraph: The expression is treated as if it were in double quotes, except that a double quote inside the expression is not treated specially. The shell expands all tokens in the expression for parameter expansion, command substitution, and quote removal. Read like this: In Arithmetic Expansion the expression is treated as if it were in double quotes, except that a So when I run: man sh and then search for "quotes" I don't get lost --- I didn't know this: Shell variables may be referenced by name inside an arithmetic expression, without needing a ``$'' sign. So bonus for reading this email :)

**References**:**Proposed updated sh(1) relating to $(( ))***From:*Robert Elz

- Prev by Date:
**npf bug(?)** - Next by Date:
**Automated report: NetBSD-current/i386 build success** - Previous by Thread:
**Proposed updated sh(1) relating to $(( ))** - Next by Thread:
**Re: Proposed updated sh(1) relating to $(( ))** - Indexes: