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 应该如何处理。
我遇到一个问题,在使用 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 应该如何处理。