Korn shell - 打印空阵列

时间:2018-01-29 15:37:12

标签: arrays printf ksh

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

的输出
#!/bin/ksh

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

(
)

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

当我尝试检查数组是否为空时,它总是有一个元素: e.g。

echo ${#a[@]}

给我1作为输出。

1 个答案:

答案 0 :(得分:0)

man kshvarname=(assign_list)用于索引数组分配'。 assign_list不是可选的。

所以,如果你做a=(),会发生什么不确定。看来,创建了一个普通变量。

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

也给了1。你强迫普通变量就像一个数组。

如果您unset a[0]unset a,那么echo ${#a[@]}会给您0并打印当时未定义的数组/变量将打印一个空字符串。

如果要将变量定义为数组,则应使用typeset -a a,然后获得不带元素的数组,按预期打印(将取消设置现有的常规变量)。并且您的代码清楚地显示了应如何处理变量/数组。