声明、定义和设置之间的差异

声明、定义和设置之间的差异
  1. 在shell中,声明、定义和设置变量之间有什么区别?

    • “声明”是否意味着变量的标识符存在,但变量的存储和值不存在?

    • “已定义”是否意味着变量的标识符和存储都存在?

    • “set”是否意味着变量的值存在? (我在 Bash 手册中的 shell 变量部分读到了一些相关内容)

    • “定义”和“设置”是否彼此暗示,因此它们是相同的?

  2. 在 Bash 手册中,参数扩展部分提到了${parameter:-word}parameter未设置或为空时执行某些操作。

    • “null”是否意味着“声明”但不是“定义”,或者“声明”但不是“设置”?

    • “未设置”是否意味着未“声明”?

  3. 提到的概念是否也适用于函数名称,并且与参数/变量的含义相同吗?

  4. 我还错过了哪些其他类似的概念?

笔记:

  • 我分别对 POSIX shell 和 Bash 的答案感兴趣。

  • 请注意,“变量的值存在”是指该变量已被赋值。通过“变量的存储存在”,我的意思是该变量已在内存中分配存储。

  • 我的问题来自阅读https://unix.stackexchange.com/a/56846/674以及 Bash 手册中的相关部分。

答案1

    • “声明”意味着您已经使用declaretypeset指定了变量的类型。这允许您指定变量名称为数组,应始终被视为整数,应为只读等。这在 POSIX shell 中不存在,它是一个bash扩展。
    • 我认为“定义”和“设置”的意思是相同的:已经为变量赋予了一个值。你所提到的问题与他的措辞根本不一致。 POSIX shell 规范和bash手册在引用变量时不使用“定义”一词,它只是说:

      如果参数具有指定值(null 是有效值),则该参数被设置。

    • “unset”与“set”相反——变量从未被赋值(或者您已经用来unset删除赋值)。如果使用该set命令,则不会列出该变量。
    • “null”表示变量已被分配一个 null(零长度)字符串作为值。
  1. 我认为这些术语与功能无关。不存在空函数这样的东西(定义函数时不允许将函数体留空)。${varname:-default}如果函数未定义,则没有什么类似于需要执行任何特殊操作的函数。因此,要么定义了函数名称,就可以调用它,要么没有定义函数名称,如果尝试调用它,就会收到错误。

由于 shell 变量包含任意长度的字符串,因此在声明变量时不会分配存储空间。分配变量时动态分配存储空间。

相关内容