当误用整型变量时(通过尝试将字符串存储到该变量中),Bash shell 是否可以抛出运行时错误?

当误用整型变量时(通过尝试将字符串存储到该变量中),Bash shell 是否可以抛出运行时错误?

Linux Mint 上的 Bash 4.3 shell:

我意识到 Bash shell 是无类型的,或者具有非常弱的类型。但是,是否可以调用 Bash shell(例如,使用某些选项),以便当声明的整型变量被误用(例如,尝试将字符串存储到该整型变量中)时,shell 会抛出运行时错误?

示例代码:

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

不,您不能在bash.原因是当你使用declare -i您只是告诉对分配给变量的任何值bash进行算术扩展。$((...))它更多的是关于值而不是关于变量。

就像

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

当你分配“你好”时

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

您可以自己检查要分配的值是否是实际数字。那里有很多方法可以做到这一点

相关内容