我有一个问题,当使用ksh时,空数组被打印为两个括号。
的输出#!/bin/ksh
a=()
printf "%s\n" "${a[@]}"
是
(
)
使用bash时,会打印一个空行。如何在ksh中获得此行为?
当我尝试检查数组是否为空时,它总是有一个元素: e.g。
echo ${#a[@]}
给我1作为输出。
答案 0 :(得分:0)
man ksh
说varname=(assign_list)
用于索引数组分配'。 assign_list
不是可选的。
所以,如果你做a=()
,会发生什么不确定。看来,创建了一个普通变量。
b=
echo "${#b[@]}"
也给了1。你强迫普通变量就像一个数组。
如果您unset a[0]
或unset a
,那么echo ${#a[@]}
会给您0
并打印当时未定义的数组/变量将打印一个空字符串。
如果要将变量定义为数组,则应使用typeset -a a
,然后获得不带元素的数组,按预期打印(将取消设置现有的常规变量)。并且您的代码清楚地显示了应如何处理变量/数组。