【发布时间】:2018-01-29 15:37:12
【问题描述】:
我遇到的问题是,在使用 ksh 时,一个空数组被打印为两个括号。
的输出#!/bin/ksh
a=()
printf "%s\n" "${a[@]}"
是
(
)
使用 bash 时,会打印一个空行。如何在 ksh 中获得这种行为?
当我尝试检查数组是否为空时,它始终只有一个元素: 例如
echo ${#a[@]}
给我 1 作为输出。
【问题讨论】:
我遇到的问题是,在使用 ksh 时,一个空数组被打印为两个括号。
的输出#!/bin/ksh
a=()
printf "%s\n" "${a[@]}"
是
(
)
使用 bash 时,会打印一个空行。如何在 ksh 中获得这种行为?
当我尝试检查数组是否为空时,它始终只有一个元素: 例如
echo ${#a[@]}
给我 1 作为输出。
【问题讨论】:
man ksh 表示 varname=(assign_list) 用于“索引数组分配”。 assign_list 不是可选的。
因此,如果您执行a=() 会发生什么是未定义的。似乎创建了一个普通变量。
b=
echo "${#b[@]}"
也给出 1。您正在强制普通变量像数组一样工作。
如果你是unset a[0],或者unset a,那么echo ${#a[@]}会给你0并且打印那个未定义的数组/变量会打印一个空字符串。
如果你想将变量定义为一个数组,你应该使用typeset -a a,然后你会得到一个没有元素的数组,按预期打印(现有的普通变量将被取消设置)。而且您的代码清楚地显示了应该如何处理变量/数组。
【讨论】: