在Bash中,以下示例演示了编程语言中的哪些概念?
在第一个示例中,变量bar
首先是一个字符串类型
值hello
,然后在算术表达式中使用时,
它的值变为0
。所以在我看来bar
的类型
从字符串更改为整数。
这个例子是否证明了这一点
隐式类型转换和动态类型的概念
(因为未明确声明或定义bar
的类型,
并根据上下文从字符串更改为整数)?
$ bar=hello
$ echo $bar
hello
$ echo $(( bar ))
0
在第二个示例中,变量bbb
被声明为整数
类型,我给它一个3*8
的值24
。然后我给它
hello
,其值更改为0
。
hello
是一个字符串
价值或另一个变量?如果hello
是字符串值,则必须先将字符串值hello
转换为整数值0
,然后再将其转换为变量bbb
。
这个例子是否证明了这个概念
静态类型,因为bbb
的类型是明确的
从一开始就宣布不能改变?
$ declare -i bbb
$ bbb=3*8
$ echo bbb
24
$ bbb=hello
$ echo $bbb
0
答案 0 :(得分:1)
关于#1,这不是类型转换;它是一个参数扩展。
x=6; echo $((x))
生成6.该值是有效的整数文字。x=foo; foo=6; echo $((x))
也生成6. x
的值是一个字符串,用于为具有整数值的参数命名。unset x; echo $((x))
生成0,因为x
未设置。x=3+5; y=bar; z=; echo $((x + y + z))
产生0,因为前三个规则中的任何一个都不能将三个字符串中的任何一个扩展为非零整数值。关于#2,bbb
具有其整数属性集的事实意味着分配给它的任何值被隐式地视为算术表达式。也就是说,bbb=whatever
相当于bbb=$((whatever))
。因此,hello
受到与上述相同的扩展。具体地,
$ declare -i bbb
$ bbb=hello
$ echo $bbb
0
$ hello=6
$ bbb=hello
$ echo $bbb
6