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
您可以自己检查要分配的值是否是实际数字。那里有很多方法可以做到这一点。