在Bash中输入变量时,declare
和typeset
之间有什么区别?在函数内部使用时:declare
与typeset
和local
之间的区别是什么?
我遇到的唯一区别是typeset可以移植到ksh脚本。除此之外,有什么理由说为什么一个人应该优先于另一个?
更新:在问题中添加了local
。
答案 0 :(得分:21)
typeset
和declare
之间的差异:前者更具便携性(例如ksh),而后者在不考虑便携性时更为可取。
declare
(或typeset
)和local
之间的差异:前者暗示后者,但更强大。例如,declare -i x
使x
具有integer
属性,declare -r x
使x
具有只读等等。
答案 1 :(得分:11)
就bash而言,不,没有区别。实际上,联机帮助页让它们具有相同的定义
声明[-aAfFilrtux] [-p] [name [= value] ...]
排版 [-aAfFilrtux] [-p] [name [= value] ......]
声明变量和/或 给他们属性。如果没有名字 给出然后显示的值 变量。将显示-p选项 每个人的属性和价值观 名称...
我还发现this little tidbit进一步证实了我的主张以及您提到的ksh
便携性。
声明或排版内置, 是完全同义词 ,允许修改变量的属性。 这是一种非常弱的打字形式 [1]在某些编程中可用 语言。 declare命令是 特定于版本2或更高版本 击。 typeset命令也有效 在ksh脚本中。
答案 2 :(得分:4)
在[{3}}部分的Bash手册中,它指出:
'排版'
typeset [-afFrxi] [-p] [NAME [= VALUE] ...]
提供'typeset'命令是为了与Korn兼容 贝壳;然而,它被弃用以支持'声明' 内置命令。