$((40-35))が5になるのはなぜですか?

$((40-35))が5になるのはなぜですか?

これの後にはどのような奇妙なシェル構文が隠されており、$((40-35))値をどのように計算しますか?

例:

$> echo $((40-35))
5

答え1

bashマニュアルページから:

  ((expression))
          The expression is evaluated according  to  the  rules  described
          below  under ARITHMETIC EVALUATION.  If the value of the expres-
          sion is non-zero, the return status is 0; otherwise  the  return
          status is 1.  This is exactly equivalent to let "expression".

そしてさらに進む:

  Arithmetic Expansion
    Arithmetic expansion allows the evaluation of an arithmetic expression and
    the substitution of the result.  The format for arithmetic expansion is:

          $((expression))

二重括弧内に入力するすべての内容は、bash評価できる数学式になります。

答え2

これは算術拡張。すべてのPOSIXシェルでサポートされています(元のBourneシェルにはありません)。算術式の構文は、基本的にC言語の構文と同じです。

$算術式では、変数を使用したり使用したりすることなく使用できます。存在しない場合、$変数は変数を表し、特にecho $((a=4)) $a印刷などに割り当てることができます4 4。を使用すると、$シェルは単純なテキスト拡張を実行します。たとえば、a=2+2; echo $(($a))印刷4中にa=2+2; echo $((a))エラーが発生します(ただし、一部のシェルでは4を印刷します)。

$((コマンドの置換($(command)開かれた括弧で始まるコマンド)または算術式()を開始するかどうかを決定する正確な規則は、$((expression))シェルによって異なります。コマンド置換を実行し、コマンドが:(で始まる場合は、安全のためにスペースを追加してください($( (echo hello))これらのコマンドはまれであるため、実際の混乱の危険なしに構文を追加できます)。

関連情報