Korn shell - 打印空数组

Korn shell - print empty array

我遇到一个问题,在使用 ksh 时,一个空数组被打印为两个括号。

的输出
#!/bin/ksh

a=()
printf "%s\n" "${a[@]}"

(
)

当使用bash时,会打印一个空行。我如何在 ksh 中获得这种行为?

当我尝试检查数组是否为空时,它始终只有一个元素: 例如

echo ${#a[@]}

给我 1 作为输出。

man ksh 对 'Indexed array assignment' 说 varname=(assign_list)assign_list 不是可选的。

所以,如果你这样做 a=(),会发生什么是不确定的。似乎创建了一个普通变量。

b= 
echo "${#b[@]}" 

也给了 1。您正在强制普通变量像数组一样工作。

如果你 unset a[0]unset a 那么 echo ${#a[@]} 会给你 0 并且打印 then undefined array/variable 会打印一个空字符串。

如果你想将变量定义为一个数组,你应该使用typeset -a a,然后你得到一个没有元素的数组,按预期打印(一个现有的普通变量将被取消设置)。您的代码清楚地显示了 variable/array 应该如何处理。