declare
在 Bash 中输入变量时,和有什么区别typeset
?declare
在函数内部使用时: andtypeset
和 和有什么区别local
?
我遇到的唯一区别是 typeset 可以移植到 ksh 脚本。除此之外,还有什么理由为什么应该优先于另一个?
更新:添加local
到问题中。
typeset
和之间的区别declare
:前者更便携(例如 ksh),而后者在便携性不是问题时更可取。
declare
(或typeset
)与在函数内部使用时的区别local
:前者暗示后者,但更强大。例如,declare -i x
使x
有integer
属性,declare -r x
使x
只读等。
就 bash 而言,不,没有区别。事实上,手册页让它们共享相同的定义
声明 [-aAfFilrtux] [-p] [name[=value] ...]
排版 [-aAfFilrtux] [-p] [name[=value] ...]
声明变量和/或赋予它们属性。如果没有给出名称,则显示变量的值。-p 选项将显示每个名称的属性和值...
我还发现了这个小消息,它进一步证实了我的主张以及ksh
您提到的可移植性。
内置的 declare 或 typeset 是精确的同义词,允许修改变量的属性。这是某些编程语言中可用的类型 [1] 的一种非常弱的形式。声明命令特定于 Bash 版本 2 或更高版本。typeset 命令也适用于 ksh 脚本。
在4.2 Bash Builtin Commands部分下的 Bash 手册中,它指出:
'typeset'
typeset [-afFrxi] [-p] [NAME[=VALUE] ...]
提供'typeset' 命令是为了与 Korn shell 兼容;但是,它已被弃用,取而代之的是 'declare' 内置命令。