Bash および Posix シェルにはさまざまな形式のコマンドがあります。推測が正しい場合、割り当てはコマンド(特に単純なコマンド)の一種です。
ただし、let
割り当ての前に使用でき、let
式の前に使用する必要があります。だから私の言葉が正しいなら、割り当ても表現だ。
let
有無にかかわらず、割り当てはすべてコマンドとして使用されます。 2つの違いは何ですか?私が主に尋ねるのは、用途の違い、つまりいつどのようなものを使用すべきかです。例えば
$ aaa=1
$ let aaa=1
答え1
let <EXPRESSION>
それ自体はPOSIX規格ではありませんが、POSIX規格の方法で次のように表現できます。
[ "$(( <EXPRESSION> ))" -ne 0 ]
通常の割り当てとは異なり、割り当てlet
(式)も評価し、結果に応じて終了コードを返します。
$ aaa=1; echo $?
0
$ aaa=0; echo $?
0
$ let aaa=1; echo $?
0
$ let aaa=0; echo $?
1
答え2
私が知る限り、let
いいえPOSIX互換。住宅検査同意する:
$ cat test.sh
#!/bin/sh
let a=3
$ shellcheck test.sh
In test.sh line 2:
let a=3
^-- SC2039: In POSIX sh, 'let' is undefined.
これバッシュのマニュアルページ説明する:
((expression))
式は、以下の算術評価で説明されている規則に従って評価されます。式がゼロでないと評価された場合、戻り状態は0で、そうでない場合は戻り状態は1です。これは let "expression" とまったく同じです。
そして
算術評価
シェルは特定の状況で算術式の評価を可能にします(組み込みコマンドと算術拡張 let と宣言を参照)。ゼロで割ることが捕捉され、エラーとしてマークされても、評価は固定幅整数で実行され、オーバーフローは確認されません。演算子とその優先順位、結合性、値はC言語と同じです。次の演算子のリストは、同じ優先順位の演算子ごとにグループ化されています。レベルは、優先順位の低い順にリストされます。
…
= *= /= %= += -= <<= >>= &= ^= |=
仕事
そして
let arg [arg ...]
各引数は評価する算術式です(上記の算術評価を参照)。最後のパラメータの値が0の場合、letは1を返し、そうでない場合は0を返します。
したがって、bashでは割り当ても式であり、 を使用して1つ以上の式を評価できるため、let
単一のlet
。しかし、上記のようにPOSIXと互換性がありません。
答え3
答え4
変数の割り当ては式やコマンドではなく、「単純なコマンド」構文の一部です。割り当てはコマンドワードの前に表示され、コマンドのコンテキストを変更できます。コマンドなしで割り当てが発生すると、現在のシェルの環境が変更されます。
望むより:https://www.gnu.org/software/bash/manual/html_node/Simple-Command-Expansion.html
この回答も参照してください。 このシェル/ Bashの構文は何ですか:someVariable = someValue someCommand
let
@Michael Homerが指摘したように、独自の構文と代入演算子を実装するBash組み込みコマンドです。 help let
便利な参考資料を提供してください。