在 Bash 中输入变量时,
declare
和 typeset
有什么区别?在函数内部使用时: declare
和 typeset
和 local
之间有什么区别?
我遇到的唯一区别是排版可以移植到 ksh 脚本。除此之外,还有什么理由优先选择其中一个吗?
更新:在问题中添加了
local
。
typeset
和declare
之间的区别:前者更便携(例如ksh),而当不考虑便携性时后者更可取。
declare
(或typeset
)和local
之间的区别:前者暗示着后者,但更强大。例如,
declare -i x
使 x
具有 integer
属性,declare -r x
使 x
只读,等等
就 bash 而言,不,没有区别。事实上,手册页让它们共享相同的定义
声明 [-aAfFilrtux] [-p] [名称[=值] ...]
排版 [-aAfFilrtux] [-p] [名称[=值] ...]
声明变量和/或 赋予他们属性。 如果没有名字 给出然后显示的值 变量。 将显示 -p 选项 每个属性和值 名字...
我还发现了这个小花絮,它进一步证实了我的主张以及你提到的
ksh
可移植性。
声明或排版内置函数, 这是精确的同义词,允许修改变量的属性。 这是一种非常弱的打字形式 [1] 在某些编程中可用 语言。声明命令是 特定于版本 2 或更高版本 猛击。排版命令也有效 在 ksh 脚本中。
在 Bash 手册中的 4.2 Bash 内置命令 一节中指出:
‘排版’
排版 [-afFrxi] [-p] [名称[=值] ...]
提供“typeset”命令是为了与 Korn 兼容 壳;然而,它已被弃用,取而代之的是“声明” 内置命令。
“提供‘typeset’命令是为了与 Korn shell 兼容。它是‘declare’内置命令的同义词。” ---- 参考号。
info "bash" "typeset"