バッシュマニュアルから
シェル変数はオペランドとして受け入れられます。式が評価される前に、パラメータ拡張が実行されます。式内では、シェル変数はパラメーター拡張構文を使用せずに名前で参照することもできます。 nullまたは設定されていないシェル変数は、パラメータ拡張構文を使用せずに名前で参照すると0に評価されます。変数が参照されるか、または「declare -i」を使用して整数属性が割り当てられた変数に値が割り当てられると、変数の値は算術式として評価されます。null 値は 0 と評価されます。シェル変数は、整数プロパティを設定しなくても式で使用できます。
「変数を参照するか、または「declare -i」を使用して整数属性が指定された変数に値を割り当てると、変数値が算術式として評価されます。」とはどういう意味ですか?
変数は算術式でオペランドとして使用されると見なされますか? var=3+4
単独では算術式では評価されません。
「参照時」の場合と「declare -i」を使用して変数に整数属性を代入する場合の例を挙げてください。
ありがとうございます。
答え1
「参照時」は「使用時」を意味します。つまりコンテキストは、変数の値を数値として解釈する必要があることを示します。
$ i=Hello
$ echo ${i}
Hello
$ echo $((i + 1))
1
明らかにi
文字列を含んでいますが、算術式に使用されるため、算術式として解釈されます。これが設定されていないか null の場合はHello
0 になります。他の値を試して効果をi
確認できます(など)。Hello
i=1+1
Hello=Hello
整数属性を持つ変数、つまり以下を使用すると、宣言された変数はdeclare -i
使用時ではなく、割り当て時に整数にキャストされます。
$ declare -i i
$ i=Hello
$ echo ${i}
0
これらすべての場合、エラーは報告されません。
整数属性変数は、構文砂糖なしで算術式で使用できます。
$ declare -i i
$ i=3+4
$ echo ${i}
7
これは、代入が算術式として解釈されるという事実の直接的な結果です。