Bashの算術式?



Arithmetic Expressions Bash



解決:

Bashでは、1行に複数の割り当てを許可します。

a = 3 b = 4 c = 5とします

あなたがあなたの質問で示すように、演算子の周りにスペースを入れることができます。ただし、スペースの使用を避ける場合は、引用符を省略できます。



ステートメントの先頭に二重括弧を使用する別の形式(i = $((j + 1))form)を使用すると、等号の周囲にスペースを含めたり、ポストインクリメントまたはプリインクリメントまたはデクリメントや追加の代入操作を実行したりできます。

((a =(b + c)* 4))((count ++))((d = --c ** 2))((e * = 2))((f = 3、g = 5))#複数の操作にはコンマ区切り文字が必要です

もしあなたがそうするならhelp '(('二重括弧は 'と同等であると言っています'表現をしましょう '。'



あなたは使用することができます間接的にも含めて、割り当てを行うための組み込みを宣言します。

blue = 2 name = blue宣言$ name = 4 echo $ blue#結果:4 echo $ {!name}#結果:4

編集:

NS$(())構文は「算術展開」と呼ばれ、内容が整数式として評価されます。これはシェルの構文要素です。



変数が整数として宣言されている場合は、どちらの形式の二重括弧も使用する必要はありません。変数名からドル記号を省略できます(二重括弧の形式のように)が、演算子の前後にスペースを追加することはできません。 :

宣言-ix = 1#整数を設定し、1に初期化します宣言+ is = 1#整数をクリアし、1に初期化しますx + = 1#x = x +1にすることもできますecho $ x#結果:2(加算)s + = 1# s = $ s + 1の場合もあり、「$」エコーが必要です。$ s#結果:11(文字列の連結)

上記のフォームとは異なり、exprには、ループ内の多くの計算に非常にコストがかかる可能性のある外部実行可能ファイルの生成が含まれます。 NS それだけ 使用する必要があるのは、シェルが独自の計算を実行できない環境、またはスクリプトがそのような環境に入る可能性がある場合の移植性です。 POSIXシェルには算術機能があるため、古いシステムでのみ問題になります。

の使用について浮動小数点演算の場合はbc、Bashや他の多くのシェルを使用する場合はそれまたは同様のものが必要です。 POSIXは、「符号付き長整数演算のみが必要です」と述べています。

float mathをサポートする2つのシェルは、kshとzshです。に加えてbc、あなたは使うことができますBashスクリプト内からのdc、AWK、Python、Perlなど。

バッシュがすることの1つ 意思 浮動小数点数を使用して、それらを印刷します。printfビルトイン(外部もあることに注意してくださいprintfですが、組み込みが優先されます)。

printf '%' 14.4f  n '1234.56#結果' 1,234.5600 '(私のロケールで) 

外部ユーティリティを必要としないため、2番目のオプションをお勧めします。

結果= $((1 + 2))

最初のオプションはに呼びかけます数学を行うためのexpr-私はよく知らないさせて。に代わる別の方法bcはDC。お気に入りを選択してください。


「必須」とは言えませんがbcは、おそらく汎用演算の最善の策です。

もっと凝ったものがあれば、いつでもPerlをパイプでつなぐことができます。

両方のアプローチの欠点は、両方とも子プロセスを開くことです。そのため、タイトループで実行すると、ネイティブのbash式よりも遅くなります(最初の例では、バックティックを使用しても同じ問題が発生します)。かどうかわからない$(())は子プロセスを呼び出します。