これの後にはどのような奇妙なシェル構文が隠されており、$((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))
これらのコマンドはまれであるため、実際の混乱の危険なしに構文を追加できます)。