Bash中的这些示例是否演示了动态类型和静态类型?

时间:2016-04-23 23:57:50

标签: bash types programming-languages dynamic-typing static-typing

在Bash中,以下示例演示了编程语言中的哪些概念?

  1. 在第一个示例中,变量bar首先是一个字符串类型 值hello,然后在算术表达式中使用时, 它的值变为0。所以在我看来bar的类型 从字符串更改为整数。

    这个例子是否证明了这一点 隐式类型转换动态类型的概念 (因为未明确声明或定义bar的类型, 并根据上下文从字符串更改为整数)?

    $ bar=hello
    $ echo $bar
    hello
    $ echo $(( bar ))
    0
    
  2. 在第二个示例中,变量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
    

1 个答案:

答案 0 :(得分:1)

关于#1,这不是类型转换;它是一个参数扩展。

  1. x=6; echo $((x))生成6.该值是有效的整数文字。
  2. x=foo; foo=6; echo $((x))也生成6. x的值是一个字符串,用于为具有整数值的参数命名。
  3. unset x; echo $((x))生成0,因为x未设置。
  4. x=3+5; y=bar; z=; echo $((x + y + z))产生0,因为前三个规则中的任何一个都不能将三个字符串中的任何一个扩展为非零整数值。
  5. 关于#2,bbb具有其整数属性集的事实意味着分配给它的任何值被隐式地视为算术表达式。也就是说,bbb=whatever相当于bbb=$((whatever))。因此,hello受到与上述相同的扩展。具体地,

    $ declare -i bbb
    $ bbb=hello
    $ echo $bbb
    0
    $ hello=6
    $ bbb=hello
    $ echo $bbb
    6