整数変数が誤って使用された場合(変数に文字列を保存しようとすると)、Bashシェルで実行時エラーが発生する可能性がありますか?

整数変数が誤って使用された場合(変数に文字列を保存しようとすると)、Bashシェルで実行時エラーが発生する可能性がありますか?

Linux MintのBash 4.3シェル:

Bashシェルは型がないか、型が非常に弱いことを知っています。しかし、Bashシェルを呼び出して(たとえば、特定のオプションを使用して)、宣言された整数変数が誤って使用された場合(たとえば、その整数変数に文字列を格納しようとした場合)、シェルで実行時エラーが発生する可能性がありますか?

サンプルコード:

declare -i age

age=23
echo "$age"   # result is 23
age="hello"
echo "$age"   # result is not the string hello - wish I could get an error message here!```


答え1

エラーを発生させる方法は次のとおりです。

set -u
# or
set -o nounset

それから:

$ set -u
$ declare -i age
$ age=hello
bash: hello: unbound variable

しかし、そうであれば、期待どおり常に「動作」するわけではありません。いいえバインドされていない変数:

$ hello=world
$ age=hello
bash: world: unbound variable

$ hello=42
$ age=hello
$ echo $age
42

$ hello=""
$ age=hello
$ echo $age
0

私はその価値がほとんどないと考え始めましたdeclare -i。算術構文なしで算術演算を実行できます。これは混乱を加重するだけです。

答え2

いいえ、できませんbashdeclare -i変数に割り当てられた値に対して算術拡張を実行することを意味しますbash$((...))変数ではなく価値についてです。

良い

$ echo  $(("hello"))
0
$ echo  $(("hello" + 2))
2

「hello」を割り当てると

$declare -i myvar
$ myvar="hello"
$ echo $myvar
0

割り当てた値が実際の数値であることを直接確認できます。そここれを行う方法はいくつかあります。

関連情報