【问题标题】:What is this line in the shell script doing?shell 脚本中的这一行在做什么?
【发布时间】:2014-01-03 15:27:05
【问题描述】:

能否向我解释一下这行代码在我正在查看的 shell 脚本中做了什么?

typeset -i NOTIFY=0

我了解 typeset 用于声明/显示具有属性的变量。我假设这里声明了一个名为 NOTIFY 的变量,它是一个整数值,并且 NOTIFY 变量的值被初始化为零。

这可能是错误的。

感谢您的帮助

【问题讨论】:

  • 您的判断是正确的,NOTIFY 是一个初始化为 0 的整数
  • 好的@anubhava,谢谢

标签: bash shell unix scripting


【解决方案1】:

typeset 是一个已弃用的*内置命令,与 declare 相同。

$ help typeset
typeset: typeset [-afFirtx] [-p] name[=value] ...
    Obsolete.  See `declare'.

所以这个:

typeset -i NOTIFY=0

做同样的事情:

declare -i NOTIFY=0

即,将NOTIFY声明为整数并将其值设置为0

*(help 文本作者和我不同意 obsolete 的含义。由于它似乎仍然存在,但不鼓励使用它,我说它是 已弃用,而不是过时。YMMV)

【讨论】:

    【解决方案2】:

    除了@kojiro 的回答,将变量声明为整数仅意味着它只能保存整数。此外,它似乎强制在 $ sigils 是可选的算术上下文中执行变量赋值:

    $ declare -i foo
    $ unset bar
    $ foo=bar         # no error assigning a string to foo
    $ echo $foo
    0
    $ bar=5
    $ foo=bar
    $ echo $foo
    5
    $ foo++
    bash: foo++: command not found
    $ foo+=1
    $ echo $foo
    6
    

    另外,演示 bash 的纯整数运算:

    $ bar=3.14
    $ foo=bar
    bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")
    

    【讨论】:

    • 顺便说一句,这可能会变得非常微妙。例如,declare -i foo bar; baz=bar; bar=3; foo=baz; echo $foo -> 3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2018-05-05
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多