正在设置的数组的定义是什么?

正在设置的数组的定义是什么?
  1. 正在设置的数组的定义来自 bash 手册:

    如果下标已被赋值,则数组变量被视为已设置。空字符串是有效值。

    • 这是否意味着当且仅当数组元素的数量大于零时才设置数组?

    • 下面的数组是集合吗myarr=()

    • 说明书还说

      如果参数已被赋值,则该参数被设置。空字符串是有效值。

      既然数组也是一个参数,那么所设置的数组的定义与所设置的参数的定义如何一致呢?

      例如,myvar=""已设置,但已myarr=()设置?已经myarr赋值了,是null吗?

  2. 对于设置的数组有不同的定义https://unix.stackexchange.com/a/246703/674

    对于支持数组的 shell,除了 yash 和 zsh 之外,它们不会报告为设置数组变量,除非已设置索引 0 的元素。

    对于 bash(但不是 ksh93 或 zsh),对于关联数组类型的变量,除非已设置键“0”的元素,否则不会将它们报告为已设置。

    0 这个定义是否不正确,因为根据 Bash 手册,没有订阅的数组名实际上指的是由索引/键索引的元素,而不是指整个数组

    引用不带下标的数组变量相当于引用下标为 0 的数组变量。

    那么这个定义实际上是针对被设置的索引/键索引的元素0,而不是针对被设置的数组吗?

    例如,${myarr+1}[[ -v myarr ]]是数组应用程序myarr测试变量/参数是否已设置的常用方法。myarr其中的含义是:或myarr[0]整个数组myarr

  3. 正在设置的 shell 数组的 POSIX 定义是什么?

答案1

  • 这是否意味着当且仅当数组元素的数量大于零时才设置数组?

是的。

  • 下面的数组是集合吗,myarr=()?

不。

  • 所设置的数组的定义与所设置的参数的定义如何一致?

两者都是平等的,我认为这里没有问题:

  • 如果参数已被赋值,则该参数被设置。空字符串是有效值。

  • 如果...已被赋值,则数组变量被视为已设置。空字符串是有效值。


  1. 有不同的定义...

答案是什么https://unix.stackexchange.com/a/246703/674描述的是测试如何工作的细节[ -n "${var+set}" ],而不是定义设置或未设置的内容,不适用于普通变量,不适用于数组。

请注意that中的that would not report ....


  1. 正在设置的 shell 数组的 POSIX 定义是什么?

POSIX 中没有“shell 数组”。

相关内容