正在设置的数组的定义来自 bash 手册:
如果下标已被赋值,则数组变量被视为已设置。空字符串是有效值。
这是否意味着当且仅当数组元素的数量大于零时才设置数组?
下面的数组是集合吗
myarr=()
?说明书还说
如果参数已被赋值,则该参数被设置。空字符串是有效值。
既然数组也是一个参数,那么所设置的数组的定义与所设置的参数的定义如何一致呢?
例如,
myvar=""
已设置,但已myarr=()
设置?已经myarr
赋值了,是null吗?
对于设置的数组有不同的定义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
?正在设置的 shell 数组的 POSIX 定义是什么?
答案1
- 这是否意味着当且仅当数组元素的数量大于零时才设置数组?
是的。
- 下面的数组是集合吗,myarr=()?
不。
- 所设置的数组的定义与所设置的参数的定义如何一致?
两者都是平等的,我认为这里没有问题:
如果参数已被赋值,则该参数被设置。空字符串是有效值。
如果...已被赋值,则数组变量被视为已设置。空字符串是有效值。
- 有不同的定义...
答案是什么https://unix.stackexchange.com/a/246703/674描述的是测试如何工作的细节[ -n "${var+set}" ]
,而不是定义设置或未设置的内容,不适用于普通变量,不适用于数组。
请注意that
中的that would not report ...
.
- 正在设置的 shell 数组的 POSIX 定义是什么?
POSIX 中没有“shell 数组”。